![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Динамическое создание компонент [D7, WinME]
Garfunkel © (2004-11-01 02:15:00)Если я создаю динамически компоненту (допустим кнопку) вот так:
var
MyButton:TButton;
begin
MyButton:=TButton.Create(Self);
MyButton.Left:=100;
MyButton.Top:=100;
MyButton.Parent:=Form1;
end;
освободятся ли ресурсы памяти выделяемые для этой кнопки при выходе из программы или надо как-то их освобождать специально. И еще вопрос что значит Self? А Owner? Что лучше, какая разница? И так и так работает.
KSergey (2004-11-01 11:57:00) [1]> [11] R © (01.11.04 11:19)
> >KSergey ©
> >Или теряем ссылку во второй строке???
> Вы меня не поняли.
> r2-например дин. массив используемый
Телепаты, знаете ли, в отпуске...
> Разобраться же я хотел - inherited необходим во всех случаях
> в деструкторе или же нет, после этого я отвечу на второй
> комментарий
А если разобраться - так может знаки вопросиков поставить хотя бы? ;)
По поводу нужности.
Ну что будет если не поставить - догадаетесь сами.
По поводу практического применения, мое мнение: можно, конечно, разобраться в каком конкретном случае оно не обязательно (например, реализация в предке пуста), однако по-моему это слишком геморойно. Проще вызвать всегда - и дело с концом ;) (если оно в предке вообще есть, конечно)
Reindeer Moss Eater (2004-11-01 11:44:00) [2]Ты все же лоб потрогай.
И пойми разницу между компонентами (наследниками TComponent) и просто экземплярами классов - членами других классов.
Автор вопроса ведет речь про первые.
R (2004-11-01 11:19:00) [3]>Reindeer Moss Eater ©
>Лучше лоб потрогай.
Когда не хотят разобраться кидают такие и подобные фразы.
Я могу быть не прав но это не означает что необходимо
играть словами(бред и т.п.) без подтверждения их конкретными
примерами или объяснениями.
>KSergey ©
>Или теряем ссылку во второй строке???
Вы меня не поняли.
r1 и r2- разные объекты.
r2-например дин. массив используемый
в компаненте, в деструкторе его уничтожаем.
Привел я их для примера. Собственно зря привел.
Разобраться же я хотел - inherited необходим во всех случаях
в деструкторе или же нет, после этого я отвечу на второй комментарий, а именно
>А это тут вообще при чем??? Как это к вопросу относится??
и
>По второму пункту - можно поподробнее? В каких случаях?
KSergey (2004-11-01 10:17:00) [4]> 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
Reindeer Moss Eater (2004-11-01 09:57:00) [5]Лучше лоб потрогай.
R (2004-11-01 09:46:00) [6]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:22:00) [7]Более того будет
ошибка если это сделать.
Вот это и есть бред.
R (2004-11-01 09:21:00) [8]>Бред
Что бред?
Reindeer Moss Eater (2004-11-01 09:06:00) [9]Бред
R (2004-11-01 08:59:00) [10]>С какого перепугу будет ошибка?
1.Лишнее действие.
2.Для некоторых случаев вызовит исключение.
Reindeer Moss Eater (2004-11-01 08:30:00) [11]Более того будет
ошибка если это сделать.
С какого перепугу будет ошибка?
R (2004-11-01 07:51:00) [12]Да и лучше использовать такую конструкцию
begin
with TButton.Create(Self) Do begin
Left:=100;
Top:=100;
Parent:=Self;//Я думаю видно что такое Self
Caption:=Owner.Name;//и Owner
end;
end;
R (2004-11-01 07:23:00) [13]>освободятся ли ресурсы памяти выделяемые для этой кнопки при выходе из программы или надо как-то их освобождать специально.
Да освободятся. Не надо специально уничтожать. Более того будет
ошибка если это сделать. А по второй части лучше почитать книжку.