Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.02.06;
Скачать: [xml.tar.bz2];

Вниз

О try..finally и создании объектов :)   Найти похожие ветки 

 
Альф   (2003-01-27 11:45) [0]

Как будет обрабатываться ini.Free(); при неудачном создании объекта ???
try
ini := TIniFile.Create("Какой-то ini");
finally
ini.Free();
end;{try}

И как правильно реализовывать такие конструкции ?
Заранее благодарен :)


 
Mike Kouzmine   (2003-01-27 11:51) [1]

if Assigned(ini) then ini.free;


 
Romkin   (2003-01-27 11:54) [2]

Не надо assigned, это во Free проверяется

ini := TIniFile.Create("Какой-то ini");
try
//Работаем с ini - Create точно прошел
finally
ini.Free;
end;{try}
</code


 
Юрий Зотов   (2003-01-27 11:58) [3]

При любом exception в конструкторе созданный в нем объект автоматически в нем же и уничтожается. Поэтому правильно - не вносить создание в блок try, иначе повторное уничтожение объекта в finally даст повторное исключение. Вот две типовые схемы правильной работы с объектом:

Ini := TIniFile.Create(...);
try
...
finally
Ini.Free
end;

with TIniFile.Create(...) do
try
...
finally
Free
end;


 
Альф   (2003-01-27 12:00) [4]

2Romkin © (27.01.03 11:54)
А почему НЕ ???
try
ini := TIniFile.Create("Какой-то ini");

тогда при exception на TIniFile.Create мы сразу попадаем на finally - а при таком создании:
ini := TIniFile.Create("Какой-то ini");
try
//Работаем с ini - Create точно прошел

внутри try ini может быть не определен ???
или делать так для страховки:
try
ini := nil;
ini := TIniFile.Create("Какой-то ini");
if Assigned(ini)
then //чего-то


 
Альф   (2003-01-27 12:05) [5]

2Юрий Зотов © (27.01.03 11:58)
Спасибо.

Тогда выходит так нужно делать ???
try
ini := TIniFile.Create(...);
try
...
finally
Ini.Free();
end;{try2}
except
// Объект не создан
end;{try1}


 
Chubais   (2003-01-27 12:09) [6]

Альф © (27.01.03 12:00)
А почему НЕ ???

ну подумай...


 
Chubais   (2003-01-27 12:10) [7]

Альф © (27.01.03 12:05)
ага


 
Альф   (2003-01-27 12:12) [8]

2Chubais © (27.01.03 12:10)
:))) - ну и ник у тя - в дрожь бросает


 
Chubais   (2003-01-27 12:16) [9]


> Альф © (27.01.03 12:12)

c xtuj "n& Ж;-))


 
Chubais   (2003-01-27 12:16) [10]


с чего эт? Ж;-))


 
Альф   (2003-01-27 12:19) [11]

2Chubais © (27.01.03 12:16)

А отгадай с одного раза :)))


 
Юрий Зотов   (2003-01-27 12:24) [12]

> Альф © (27.01.03 12:00)
Вот так делать как раз не нужно. Почему - я написал выше. И лищние проверки, и лишние присвоения тоже ни к чему.

> Альф © (27.01.03 12:05)
А вот так делать можно. Но обычно try-except не пишут, он просто не нужен. Внутренний try-except в конструкторе уничтожает объект и перевозбуждает исключение, поэтому он сам выдаст нужную диагностику. Дополнительный try-except (как у Вас) нужен только если мы хотим это исключение перехватить. Но имейте в виду, что Ваш код перехватыват не только исключения в конструкторе, а вообще все подряд.


 
Chubais   (2003-01-27 12:32) [13]

Альф © (27.01.03 12:19)
неужто света нет и упс уже помирает? ))))))))


 
Альф   (2003-01-27 13:53) [14]

2Юрий Зотов © (27.01.03 12:24)
Спасибо - еще большее чем в первый раз :)))

2Chubais © (27.01.03 12:32)
Свет есть - УПСа нет :(



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.02.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.011 c
1-15574
Kotka
2003-01-27 15:47
2003.02.06
Ресурсы


1-15585
laza
2003-01-28 23:04
2003.02.06
Помогите с кодом


1-15662
_vitek_
2003-01-25 02:56
2003.02.06
Random глючит...


14-15896
Shadow
2003-01-20 15:51
2003.02.06
Депресняк %((((


3-15524
Andy Eremin
2003-01-21 10:22
2003.02.06
DBGrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский