Форум: "Начинающим";
Текущий архив: 2005.10.16;
Скачать: [xml.tar.bz2];
ВнизОсвобождение памяти. Найти похожие ветки
← →
TStas © (2005-09-09 16:14) [0]Когда я освобождаю память от объекта, но удаляю его, как его предка, например:
obj1:TWinControl;
(Sender as TControl).Free;
Точно вся память освободится?
← →
MBo © (2005-09-09 16:17) [1]деструктор Destroy - виртуальный метод так что вызовется деструктор именно нужного типа. К TControl приводить нет смысла.
← →
Digitman © (2005-09-09 16:18) [2]
> Точно вся память освободится?
а в чем сомнения-то ?
> удаляю его, как его предка
это ты явно сморозил.
причем здесь вообще предок ?
ты уничтожаешь ОБЪЕКТ !
и при этом неважно, наследником какого класса является уничтожаемый объект
Free вызовет Destroy.
Destroy - виртуальный метод.
← →
TStas © (2005-09-09 16:37) [3]>Digitman
Наверно торможу. Что дистрой виртуальный метод, это понятно, как бы я ниначе его перекрыл. Но ведь Sender:TObject, то есть по адресу памяти, которым он является, найдется тип объекта и вызовется соответствующий деструктор?
← →
Anatoly Podgoretsky © (2005-09-09 16:53) [4]Вот наглядный пример возможностей ООП
var
X : TStrings;
begin
X := TStringList.Create; // создаем из наследника
X.Free; // будет вызван метод Destroy класса TStringList, а не TStrings, поскольку метод виртуальной и заменяет собой метод TStrings.Destroy, вероятнее всего TStringList.Destroy вызовет внутри метод предка, но тебе об этом беспокоиться не стоит
end;
← →
Digitman © (2005-09-09 16:59) [5]
> TStas © (09.09.05 16:37) [3]
если ты перекрыл в наследнике метод Destroy, за свой диструктор можешь не волноваться - он обязательно будет вызван, как бы ни был "обозван" Sender (лишь бы Sender имел тип, соответствующий одному из элементов цепочки "предков")
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2005.10.16;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.037 c