Форум: "Основная";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];
ВнизНеобходимость деструктора в описании своего класса Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.038 c