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

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

Уничтожение TWinControl.Controls[] [D7]


Страницы:   1 2

StriderMan ©   (2009-03-24 13:18:00) 

Возник такой теоретический вопрос: зачем TWinControl обходит список своих контролов Controls и вызывает им деструкторы? Ведь эти же контролы должные быть разрушены своими Owner'ами, которые в общем случае не совпадают с Parent'ами.

Собственно наступил на грабли, что контрол уже разрушен мною а его Parent пытается это сделать еще раз и получает AV.

Как решается эта проблема в самом VCL пока не нашел


Palladin   (2009-03-24 14:28:00) [21]

Взять посмотреть на это со стороны IDE, ты накидал на панель контролов, потом взял и удалил панель, контролы должны остаться? Во времени исполнения тоже самое, не устанешь реализовывать слежку за  контролами?


StriderMan   (2009-03-24 14:26:00) [22]


> Ну мое мнение - это экономия на системных объектах

Мне кажется это защита от тех, кому лень отслеживать время жизни своих объектов. Своеобразная перестраховка от утечки памяти


StriderMan   (2009-03-24 14:20:00) [23]

собственно хэлп не проливает свет на вопрос почему именно так:

The Parent property declared in TControl is similar to the Owner property declared in TComponent, in that the Parent of a control frees the control just as the Owner of a component frees that Component. However, the Parent of a control is always a windowed control that visually contains the control, and is responsible for writing the control to a stream when the form is saved. The Owner of a component is the component that was passed as a parameter in the constructor and, if assigned, initiates the process of saving all objects (including the control and its parent) when the form is saved.


Palladin   (2009-03-24 14:19:00) [24]

Ну мое мнение - это экономия на системных объектах.


StriderMan   (2009-03-24 14:18:00) [25]

Чтобы не быть голословным:

destructor TWinControl.Destroy;
var
 I: Integer;
 Instance: TControl;
begin
......
 I := ControlCount;
 while I <> 0 do
 begin
   Instance := Controls[I - 1];
   Remove(Instance);
   Instance.Destroy;
   I := ControlCount;
 end;
....
end;


StriderMan   (2009-03-24 14:14:00) [26]


> Года три назад я тоже так считал

Я никак не считаю, мне интересно почему сделано именно так


Palladin   (2009-03-24 13:33:00) [27]


> Как решается эта проблема в самом VCL пока не нашел

Не ищи решения того чего нет )


Palladin   (2009-03-24 13:31:00) [28]


> StriderMan   (24.03.09 13:18) 

Года три назад я тоже так считал. Пока меня LVT носом не ткнул в справку по Parent.


Страницы:   1 2

Наверх

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