Текущий архив: 2004.11.14;
Скачать: CL | DM;
ВнизДинамическое создание компонент Найти похожие ветки
← →
Garfunkel (2004-11-01 02:15) [0]Если я создаю динамически компоненту (допустим кнопку) вот так:
var
MyButton:TButton;
begin
MyButton:=TButton.Create(Self);
MyButton.Left:=100;
MyButton.Top:=100;
MyButton.Parent:=Form1;
end;
освободятся ли ресурсы памяти выделяемые для этой кнопки при выходе из программы или надо как-то их освобождать специально. И еще вопрос что значит Self? А Owner? Что лучше, какая разница? И так и так работает.
← →
R © (2004-11-01 07:23) [1]>освободятся ли ресурсы памяти выделяемые для этой кнопки при выходе из программы или надо как-то их освобождать специально.
Да освободятся. Не надо специально уничтожать. Более того будет
ошибка если это сделать. А по второй части лучше почитать книжку.
← →
R © (2004-11-01 07:51) [2]Да и лучше использовать такую конструкцию
begin
with TButton.Create(Self) Do begin
Left:=100;
Top:=100;
Parent:=Self;//Я думаю видно что такое Self
Caption:=Owner.Name;//и Owner
end;
end;
← →
Reindeer Moss Eater © (2004-11-01 08:30) [3]Более того будет
ошибка если это сделать.
С какого перепугу будет ошибка?
← →
R © (2004-11-01 08:59) [4]>С какого перепугу будет ошибка?
1.Лишнее действие.
2.Для некоторых случаев вызовит исключение.
← →
Reindeer Moss Eater © (2004-11-01 09:06) [5]Бред
← →
R © (2004-11-01 09:21) [6]>Бред
Что бред?
← →
Reindeer Moss Eater © (2004-11-01 09:22) [7]Более того будет
ошибка если это сделать.
Вот это и есть бред.
← →
R © (2004-11-01 09:46) [8]OK !
Во всех случаях
необходимо в деструкторе компанента(класса)
предусмватривать inherited
...............
destructor Destroy; override;
.................
destructor TMyComp.Destroy;
begin
inherited;//вот это обязательно и если нет что произойдет в реализации(в используемой программе) при уничтожении компанента
r1.Free;//что то
r2:=nil;//уничтожаем
end;
или же можно так
destructor TMyComp.Destroy;
begin
r1.Free;
r2:=nil;
end;
← →
Reindeer Moss Eater © (2004-11-01 09:57) [9]Лучше лоб потрогай.
← →
KSergey © (2004-11-01 10:17) [10]> r1.Free;//что то
> r2:=nil;//уничтожаем
Или теряем ссылку во второй строке???
> [8] R © (01.11.04 09:46)
> OK !
> Во всех случаях
> необходимо в деструкторе компанента(класса)
А это тут вообще при чем??? Как это к вопросу относится??
> [4] R © (01.11.04 08:59)
> >С какого перепугу будет ошибка?
> 1.Лишнее действие.
> 2.Для некоторых случаев вызовит исключение.
Лишнее действие - не есть ошибка периода выполнения.
По второму пункту - можно поподробнее? В каких случаях?
Автору
Читать тут:
http://www.delphikingdom.com/helloworld/runtime_comp.htm
← →
R © (2004-11-01 11:19) [11]>Reindeer Moss Eater ©
>Лучше лоб потрогай.
Когда не хотят разобраться кидают такие и подобные фразы.
Я могу быть не прав но это не означает что необходимо
играть словами(бред и т.п.) без подтверждения их конкретными
примерами или объяснениями.
>KSergey ©
>Или теряем ссылку во второй строке???
Вы меня не поняли.
r1 и r2- разные объекты.
r2-например дин. массив используемый
в компаненте, в деструкторе его уничтожаем.
Привел я их для примера. Собственно зря привел.
Разобраться же я хотел - inherited необходим во всех случаях
в деструкторе или же нет, после этого я отвечу на второй комментарий, а именно
>А это тут вообще при чем??? Как это к вопросу относится??
и
>По второму пункту - можно поподробнее? В каких случаях?
← →
Reindeer Moss Eater © (2004-11-01 11:44) [12]Ты все же лоб потрогай.
И пойми разницу между компонентами (наследниками TComponent) и просто экземплярами классов - членами других классов.
Автор вопроса ведет речь про первые.
← →
KSergey © (2004-11-01 11:57) [13]> [11] R © (01.11.04 11:19)
> >KSergey ©
> >Или теряем ссылку во второй строке???
> Вы меня не поняли.
> r2-например дин. массив используемый
Телепаты, знаете ли, в отпуске...
> Разобраться же я хотел - inherited необходим во всех случаях
> в деструкторе или же нет, после этого я отвечу на второй
> комментарий
А если разобраться - так может знаки вопросиков поставить хотя бы? ;)
По поводу нужности.
Ну что будет если не поставить - догадаетесь сами.
По поводу практического применения, мое мнение: можно, конечно, разобраться в каком конкретном случае оно не обязательно (например, реализация в предке пуста), однако по-моему это слишком геморойно. Проще вызвать всегда - и дело с концом ;) (если оно в предке вообще есть, конечно)
Страницы: 1 вся ветка
Текущий архив: 2004.11.14;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.041 c