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

Вниз

Насколько безопасен SetLength   Найти похожие ветки 

 
Тимохов ©   (2004-05-27 18:01) [40]


> Ega23 ©   (27.05.04 17:57) [36]

Это явно описано в мануале дельфи.
В случае генерации исключения в конструкторе будет вызыван деструктор, зачем отвобождена память. Именно поэтому в деструкторе нужно предполагать, что не все члены класса могут быть до конца инициализированы.

Например я всегда пишу.
destructor TMyObj.Destroy;
begin
  if kList <> nil then
  begin
     for I := 0 to kList.Count-1 do tobject(kList).free;
     kList.Free();
  end;
  inherited;
end;


 
Ega23 ©   (2004-05-27 18:07) [41]

Тимохов ©   (27.05.04 18:01) [40]

В принципе, я пишу точно также. Но не везде :-( Со старых времён много где осталось.
Но, тем не менее: если экземпляр TMyObj всё-таки оставил за собой память, будучи при этом объявленным, как внутренняя переменная процедуры, то будет ли эта память освобождена при выходе из этой процедуры? Или она так за Application"ом останется, пока его не убъют?


 
default ©   (2004-05-27 18:11) [42]

Anatoly Podgoretsky ©   (27.05.04 17:54) [33]
ничего интересного, компилятор об этом заботится(в EDX пишет -1 как флаг сигнализ-ий о том что объект уже вылупился; в EAX как обычно адрес объекта)


 
Тимохов ©   (2004-05-27 18:23) [43]


> Ega23 ©   (27.05.04 18:07) [41]

классы дельфи не попадают под уборку мусора. По сему - создали объект и не удалили - на всю жизнь процесса память потеряна.


 
Ega23 ©   (2004-05-27 18:28) [44]

классы дельфи не попадают под уборку мусора. По сему - создали объект и не удалили - на всю жизнь процесса память потеряна.

Это да. Это понятно. Но вот если он создался "не до конца"?


 
Тимохов ©   (2004-05-27 18:31) [45]


> Ega23 ©   (27.05.04 18:28) [44]

почитайте внимательнее выше.
не до конца быть не может.
если была ошибка в конструкторе, то он уничтожится, если не было, то создасться до конца.


 
Ega23 ©   (2004-05-27 18:33) [46]

Понял...



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

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

Наверх




Память: 0.54 MB
Время: 0.054 c
1-1085283375
Demik
2004-05-23 07:36
2004.06.06
Ресурсы -> как работать с ресурсами


14-1084568689
Феликс
2004-05-15 01:04
2004.06.06
Защита excelевского файла


1-1085496946
init13
2004-05-25 18:55
2004.06.06
StringGrid


1-1085561649
Алексей
2004-05-26 12:54
2004.06.06
Как указать компилятору, что число является двоичным?


14-1085123667
Layner
2004-05-21 11:14
2004.06.06
Статика на машине (2106), у кого то есть такое же?