Главная страница
    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.01 c
3-15433
F1
2003-01-22 13:25
2003.02.06
Как найти все запущенные SQL-serverа в сети...


3-15441
tanuha
2003-01-17 16:05
2003.02.06
Помогите составить SQL запрос


1-15683
Alexander
2003-01-27 09:17
2003.02.06
При печати создаются spool файлы. Если я задал печать в формате


8-15772
Lony
2002-10-21 02:53
2003.02.06
MPEG4


1-15620
Sasha9
2003-01-28 21:52
2003.02.06
Скриншот





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский