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

Вниз

Необходимость деструктора в описании своего класса   Найти похожие ветки 

 
SergP.   (2005-05-25 18:25) [0]

Пишу некоторый класс:


type
    TMonth = class(TEdit)
  public
    constructor Create(Aowner:TComponent); override;
  private
    month:byte;
    procedure setValue(value:byte);
    procedure OnPopupClick(sender:TObject);
  published
    property value:byte read month write setvalue;
end;

...
const
  monthlist: array[1..12] of string[8] = ("січень","лютий","березень","квітень","травень","червень","липень","серпень","вересень","жовтень","листопад","грудень") ;
...

constructor TMonth.Create(Aowner:TComponent);
var
i:integer;
MenuItem:TmenuItem;
begin
 inherited Create(Aowner);
 Text:="";
 ReadOnly:=true;
 PopupMenu:=TPopupMenu.create(Aowner);
 PopupMenu.Items.Clear;
 for i:=1 to 12 do
 begin
   MenuItem:=TMenuItem.Create(PopupMenu);
   MenuItem.Caption:=monthlist[i];
   PopupMenu.Items.Add(MenuItem);
   MenuItem.Tag:=i;
   MenuItem.OnClick:=OnPopupClick;
 end;
end;

procedure TMonth.OnPopupClick(sender:TObject);
begin
month:=TMenuItem(sender).tag;
text:=TMenuItem(sender).Caption;
end;

procedure TMonth.setValue(value:byte);
begin
 if (value>0) and (value<13) then month:=value;
 text:=monthlist[value];
end;


нужно ли мне писать деструктор? Или необязательно?


 
Eraser ©   (2005-05-25 18:31) [1]

SergP.   (25.05.05 18:25)

Нужно.
Деструктор необходим для освобождения ресурсов, занятых в конструкторе. В конструкторе у тебя создан экз. класса TPopupMenu.


 
TUser ©   (2005-05-25 18:32) [2]

Да, в деструкторе надо будет уничтожить PopupMenu и его итемы


 
Eraser ©   (2005-05-25 18:33) [3]

TUser ©   (25.05.05 18:32) [2]

А айтемы причём? Разве они не уничтожатся в деструкторе TPopupMenu?


 
Mx ©   (2005-05-25 18:38) [4]

А если в PopupMenu:=TPopupMenu.create(Aowner) вместо AOwner поставить Self то необходимости в деструкторе не вижу. TComponent.DestroyComponents всё сама разрушит.


 
SergP.   (2005-05-25 18:40) [5]

Вот просто сомнения возникли...
PopupMenu разве не уничтожится при уничтожении своего Owner"а?


 
SergP.   (2005-05-25 18:41) [6]

Вот просто сомнения возникли...
PopupMenu разве не уничтожится при уничтожении своего Owner"а?


 
Mx ©   (2005-05-25 18:43) [7]

Уничтожится, но "зашиваться" на "внешний" Owner думаю не стоит, лучше Owner"ом меню сделать сам экземпляр TMonth, то бишь Self.


 
Eraser ©   (2005-05-25 18:43) [8]

SergP.   (25.05.05 18:40) [5]

А если экземпляры твоего класса то создаются, то уничтожаются по ходу выполнения программы, при этом программа "резидентная", т.е. всегда работает, и ещё при этом комп, на котором она установлена,  почти никогда не перезагружают, что тоже частое явления в различных учереждениях... через некоторое время твоя прога сожрёт всю память.


 
SergP.   (2005-05-25 18:48) [9]


> Eraser ©   (25.05.05 18:43) [8]


Ага. Понятно... Просто в моем случае создается форма, на ней ScrollBox, а уже на нем куча всяких объектов, в том числе и объектов вышеупомянутого класса, а уничтожаться все планируется методом уничтожения самой формы...


 
SergP.   (2005-05-25 18:52) [10]


> Mx ©   (25.05.05 18:43) [7]
> Уничтожится, но "зашиваться" на "внешний" Owner думаю не
> стоит, лучше Owner"ом меню сделать сам экземпляр TMonth,
> то бишь Self.


на всякий случай так и сделал....


 
Mx ©   (2005-05-25 19:13) [11]

Правильно, уничтожение формы приведет к вызову ее DestroyComponents, а потом к этому же методу всех ее компонентов, но если этот PopupMenu "жить не может" без TMonth, то Owner"ом корректно сделать TMonth, а иначе будет то, о чем написал Eraser © (25.05.05 18:43) [8].



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

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

Наверх




Память: 0.49 MB
Время: 0.056 c
3-1115789288
kyn66
2005-05-11 09:28
2005.06.14
Кто реально работает с базами Access, отзовитесь...


1-1117279844
Ivan%
2005-05-28 15:30
2005.06.14
TOleContainer и любопытный пользователь


10-1094454364
serg128
2004-09-06 11:06
2005.06.14
Не получается законнектиться вторым экземпляром программы...


14-1116644228
boriskb
2005-05-21 06:57
2005.06.14
Почуствуй себя богатым :)


14-1116919421
Vasya.ru
2005-05-24 11:23
2005.06.14
Критерий интервалов - кто знает?