Главная страница
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.06 c
1-1116836985
P.N.P.
2005-05-23 12:29
2005.06.14
Приведение типов


1-1116967301
grol
2005-05-25 00:41
2005.06.14
Как правильно урезать переменную Real?


3-1115389297
Karburator
2005-05-06 18:21
2005.06.14
(SQL) integer в дату


4-1114443615
RealGaffer
2005-04-25 19:40
2005.06.14
TWebBrowser


1-1117365248
Rembo
2005-05-29 15:14
2005.06.14
Печать содержимого TStringgrid