![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Почему не вызывается 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и все заработает как надо.