powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Получим ли мы утечки памяти, если...
15 сообщений из 15, страница 1 из 1
Получим ли мы утечки памяти, если...
    #39680937
SQL-Talker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет!

Если при создании формы мы присвоим результат переменной типа TForm то получим ли мы утечки памяти?
Т.е. мы имеем форму типа
Код: pascal
1.
2.
3.
4.
5.
6.
TMyForm = class(TForm)
  ...
  ...
  ...
  constructor MyConstructor(AOwner: TComponent);
end;



Создаем ее и убиваем так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
var
  frm: TForm;
begin
  TMyForm.MyConstructor(Self);
  try
    ...
    ...
    ...
  finally
    frm.Free;
  end;
end;



Получим мы тут утечку?
...
Рейтинг: 0 / 0
Получим ли мы утечки памяти, если...
    #39680948
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL-TalkerПолучим мы тут утечку?
Где присвоение?
...
Рейтинг: 0 / 0
Получим ли мы утечки памяти, если...
    #39680955
SQL-Talker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон:

Код: pascal
1.
2.
3.
begin
   frm := TMyForm.MyConstructor(Self);
   ...
...
Рейтинг: 0 / 0
Получим ли мы утечки памяти, если...
    #39680957
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL-TalkerПардон:
Так не получим, если Free в TMyForm каким-то случайным образом не перекрыт.
...
Рейтинг: 0 / 0
Получим ли мы утечки памяти, если...
    #39680962
SQL-Talker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman,

Т.е. на этой форме лежит куча разных компонент (форма для редактирования данных из БД) и не смотря на то, что по факту делается Free для переменной с типом не самой формы, а ее родителя ( TForm ), все равно все корректно удалится и память будет освобождена?
...
Рейтинг: 0 / 0
Получим ли мы утечки памяти, если...
    #39680963
527470
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL-Talker,

Да, деструкторы в Delphi виртуальные и если написаны правильно, то всё отработает.
...
Рейтинг: 0 / 0
Получим ли мы утечки памяти, если...
    #39680989
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL-Talker,

удалять компоненты будет даже не деструктор родителя родителя (TCustomForm.Destroy), а где-то ещё глубже

TComponent.Destroy и TWinControl.Destroy ЕМНИП
...
Рейтинг: 0 / 0
Получим ли мы утечки памяти, если...
    #39681013
SQL-Talker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ок, отлично. Спасибо большое!
...
Рейтинг: 0 / 0
Получим ли мы утечки памяти, если...
    #39681024
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL-Talkerwadman,

Т.е. на этой форме лежит куча разных компонент (форма для редактирования данных из БД) и не смотря на то, что по факту делается Free для переменной с типом не самой формы, а ее родителя ( TForm ), все равно все корректно удалится и память будет освобождена?

По факту Free делается ну у родителя а как раз у твоей формы, родитель вызывается позже с помощью inherited. Отладчиком смотрится без каких-либо проблем как что разрушается.
...
Рейтинг: 0 / 0
Получим ли мы утечки памяти, если...
    #39681036
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL-Talker,

Главное, если вы перекрываете в своей форме деструктор, то он должен быть оформлен как
Код: pascal
1.
destructor Destory; override;

и в самом деструкторе необходимо вызвать inherited ;
...
Рейтинг: 0 / 0
Получим ли мы утечки памяти, если...
    #39681050
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochудалять компоненты будет даже не деструктор родителя родителя (TCustomForm.Destroy), а где-то ещё глубже

TComponent.Destroy и TWinControl.Destroy ЕМНИП
и для TObject.
Вот если родитель старше TObject - тогда да ;)
...
Рейтинг: 0 / 0
Получим ли мы утечки памяти, если...
    #39681242
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у TObject нет свойств .Compontents[i] и .Controls[i]
...
Рейтинг: 0 / 0
Получим ли мы утечки памяти, если...
    #39681572
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochу TObject нет свойств .Compontents[i] и .Controls[i]а деструктор есть.
...
Рейтинг: 0 / 0
Получим ли мы утечки памяти, если...
    #39681623
Guest2013
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL-Talker,

для конструкций вида:
Код: pascal
1.
2.
3.
4.
5.
6.
MyForm := TMyForm.Create(Self);
try
{...}
finally
  MyForm.Free;
end;


предполагается остановка основного потока приложения в этом месте, (т.е. только MyForm.ShowModal ) до закрытия этой формы;
для нескольких окон можно использовать ивент самой формы метод OnClose и прописать в нем:
Код: pascal
1.
2.
3.
4.
begin
  {...}
  Action := caFree;
end;


Тогда нет необходимости самому уничтожать окно ( MyForm.Free ), оно само будет уничтожено по закрытии.
...
Рейтинг: 0 / 0
Получим ли мы утечки памяти, если...
    #39682191
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockAriochу TObject нет свойств .Compontents[i] и .Controls[i]а деструктор есть.

....но он не может удалять компоненты, потому что в TObject их нет
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Получим ли мы утечки памяти, если...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]