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

Вниз

Уничтожение вложенных объектов   Найти похожие ветки 

 
TUser ©   (2005-11-03 11:30) [0]

Почему неправильно их унижтожать, как в посте [4] этой ветки? И как правильнее?
http://delphimaster.net/view/1-1131005206/

Там это был бы оффтоп.


 
jack128 ©   (2005-11-03 11:35) [1]

Их не правельно уничтожать через Free, если мы допускаем возможность исключения в деструкторе. Потому что если в унаследуемом деструкторе возникнет исключение, то мы получим битую ссылку.

PS методом Free не пользуюсь. Только FreeAndNil.


 
Sergey_Masloff   (2005-11-03 11:37) [2]

jack128 ©   (03.11.05 11:35) [1]
>то мы получим битую ссылку.
В твоем методе - утечку памяти. Так ведь?


 
umbra ©   (2005-11-03 11:40) [3]

мне кажется, что ничего о недопустимости конструкции типа


destructor TSomeObj.Destroy;
begin
FSubObj.Free;
inherited;
end;


речь не шла. речь была о недопустимости исключений в деструкторе.


 
umbra ©   (2005-11-03 11:45) [4]

Единственное отличие FSubObj.Free от FreeAndNil(FSubObj) в том, что после Free функция Assigned(FSubObj) вернет true, а после FreeAndNil(FSubObj) - false.


 
jack128 ©   (2005-11-03 11:46) [5]

Sergey_Masloff   (03.11.05 11:37) [2]
В твоем методе - утечку памяти. Так ведь?


Да, если в в деструкторе FSubObj возникнет исключение. Собственно гарантию коректного выполнения даст только использование такой функции

procedure FreeAndNilEx(var Obj: TObject);
begin
 FObj.Free;
 FObj := nil;
end;

Но лично мне проще писать такие классы, которые бы не генерили исключений в деструкторе, чем вставлять везде и всюду проверки на нил.


 
Sergey_Masloff   (2005-11-03 11:54) [6]

jack128 ©   (03.11.05 11:46) [5]

разве что

procedure FreeAndNilEx(var Obj: TObject);
begin
 try
   try
     FObj.Free;
   finally
     FObj := nil;
   end;
 except
   WriteToLog("...oops");
 end;
end;


так что действительно лучше
>проще писать такие классы, которые



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

Текущий архив: 2005.11.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.024 c
9-1120952011
Тестер1
2005-07-10 03:33
2005.11.27
Кто нибудь пытался выдрать анимацию из игры Братья Пилоты ?


5-1112860368
ancara
2005-04-07 11:52
2005.11.27
Как добавить пути к модулям?


3-1129513865
antoxa2005
2005-10-17 05:51
2005.11.27
Подскажите, а можно ли сохранить в поле БД Access любой объект ?


14-1131002413
MBo
2005-11-03 10:20
2005.11.27
Пятничные задачки. Повтор нерешенного, и кое-что новое...


3-1129265006
kvi
2005-10-14 08:43
2005.11.27
ограничение на число полей в таблицах paradox