Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.044 c
14-1116935671
Alexander Panov
2005-05-24 15:54
2005.06.14
Абонентам обычных телефонов с 1 июля придется платить за звонки н


8-1109702858
StarLit
2005-03-01 21:47
2005.06.14
Есть PageControl на форме, как поменять его стандарт. цвет?


1-1116934243
ANB
2005-05-24 15:30
2005.06.14
Что такое "Объекты GDI" в диспетчере задач ?


1-1117525901
Layner
2005-05-31 11:51
2005.06.14
Здравствуйте, подскажите плз, как программно установить ListView


3-1113986759
Phoenix9000
2005-04-20 12:45
2005.06.14
DBGrid. Отображение "Да" вместо "True"





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский