Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.02.06;
Скачать: CL | DM;

Вниз

О 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.012 c
3-15422
Oleg _K
2003-01-17 19:22
2003.02.06
Не инсталится BDE под WinXP


1-15579
TAN
2003-01-28 17:26
2003.02.06
FileListBox и копирование


14-15816
Ginzzz
2003-01-18 15:07
2003.02.06
Что такое динамические диски ?


3-15472
BorisUK
2003-01-17 07:49
2003.02.06
Процедура на сервере с параметрами


7-15973
BALU1111
2002-11-25 12:41
2003.02.06
TaskManger