Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Динамическое создание компонент [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]

>освободятся ли ресурсы памяти выделяемые для этой кнопки при выходе из программы или надо как-то их освобождать специально.

Да освободятся. Не надо специально уничтожать. Более того будет
ошибка если это сделать. А по второй части лучше почитать книжку.


Наверх

Титульная страница Поиск, карта сайта Написать письмо