Главная страница
    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.625 c
4-1114250886
Керик
2005-04-23 14:08
2005.06.14
SHBrowseForFolder


10-1094116683
Тест
2004-09-02 13:18
2005.06.14
JBuilderX &amp; Delphi


3-1115213043
Urvin
2005-05-04 17:24
2005.06.14
Как поставить ИГНОРКЕЙС в запрос?


4-1112857716
zioza
2005-04-07 11:08
2005.06.14
Блокировать копирование exe


14-1117028106
Korvet
2005-05-25 17:35
2005.06.14
Помогите с кодом я заплачу





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский