Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Почему не вызывается destructor?


newbie2 ©   (2006-06-01 16:36:00) 

поясните почему
TmyColl = class(TCollection)
public
property Items[Index: Integer]: TmyItem read GetItem; default;
...

если вызвать так:
myObj.myColl[i].myItem.Free;
TmyItem.Destroy - вызывается, а если так то нет:
myObj.myColl[i].Free;


Amoeba   (2006-06-02 12:23:00) [1]


> Loginov Dmitry ©   (01.06.06 18:26) [4]
> Сомневаюсь, что при таком коде
>
> myObj.myColl[i].myItem.Free;
>
> вызывается TmyItem.Destroy

Free вызовет Destroy если последний, как это полагается, виртуальный. Если же программист по невнимательности или незнанию сделал деструктор статическим, то он, естественно, вызываться из Free не будет.


Loginov Dmitry   (2006-06-01 18:26:00) [2]

Сомневаюсь, что при таком коде

myObj.myColl[i].myItem.Free;

вызывается TmyItem.Destroy


Amoeba   (2006-06-01 16:54:00) [3]


> De   (01.06.06 16:52) [2]
> да он и так override

Ты что, имел счасть видеть код автора вопроса, или есть он сам, что делаешь такое безаппеляционное завление?


De   (2006-06-01 16:52:00) [4]

да он и так override


Amoeba   (2006-06-01 16:49:00) [5]

Деструкторы всегда должны быть виртуальными. Просто добавь в объявление деструктора волшебное словечко overrideи все заработает как надо.


Наверх

Титульная страница Поиск, карта сайта Написать письмо