Динамическое создание форм и дальнейшее освобождение ресурсов.
Задача: очистить выделенную память после закрытия формы. Как оказалось, по закрытию форма не вызывает своего деструктора.
Собственно как корректно заставить форму освобождать память при закрытии?
Первой идеей было поместить в обработчик события OnClose, следующую строчку:
{
delete this;
}
Но не вызовет ли этот код конфликтных ситуаций? Ведь по сути получится, что выход из функции класса TForm2::FormClose() произойдет уже после того, как сам класс будет уничтожен.
Собственно два вопроса: корректен ли такой способ удаления объекта формы? Если нет, то как это правильно делать?
Задача: очистить выделенную память после закрытия формы. Как оказалось, по закрытию форма не вызывает своего деструктора.
Собственно как корректно заставить форму освобождать память при закрытии?
Первой идеей было поместить в обработчик события OnClose, следующую строчку:
{
delete this;
}
Но не вызовет ли этот код конфликтных ситуаций? Ведь по сути получится, что выход из функции класса TForm2::FormClose() произойдет уже после того, как сам класс будет уничтожен.
Собственно два вопроса: корректен ли такой способ удаления объекта формы? Если нет, то как это правильно делать?
как форма отображается? (модально али нет)
если модально то
delete Form;
иначе удалять принудительно когда она больше не нужна в классе, который ее создал и вызвал (можно при помощи некоего флага)
т.е.
~TForm2();
а вообще, Form2->Free() - освобобождает и так память.
вот пример динамического создания:
Form->ShowModal();
Form->Free();
~TForm2();
а вообще, Form2->Free() - освобобождает и так память.
вот пример динамического создания:
Form->ShowModal();
Form->Free();
а что деструктор формы делает? (я всегда думал что он атоматом вызывается при уничтожении объекта)
как его сюда приваять не вижу возможностей (разве только lkz удаления дочерних объектов)
метод Free() - это паскалевская конструкция, в С++ не прокатит, для этого есть delete
как его сюда приваять не вижу возможностей (разве только lkz удаления дочерних объектов)
метод Free() - это паскалевская конструкция, в С++ не прокатит, для этого есть delete
На счет деструктора, да, я ошибся.
delete - тоже прокатит. Но, если мне не изменяет память, Free() - не просто уничтожает объект, в отличии от delete.
delete - тоже прокатит. Но, если мне не изменяет память, Free() - не просто уничтожает объект, в отличии от delete.
цитата прямо из хелпа:
[quote=BCB Help]
Do not call the Free method of an object. Instead, use the delete keyword, which invokes Free to destroy an object. Free automatically calls the destructor if the object reference is not NULL.
[/quote]
Задача: очистить выделенную память после закрытия формы. Как оказалось, по закрытию форма не вызывает своего деструктора.
Собственно как корректно заставить форму освобождать память при закрытии?
Первой идеей было поместить в обработчик события OnClose, следующую строчку:
{
delete this;
}
Но не вызовет ли этот код конфликтных ситуаций? Ведь по сути получится, что выход из функции класса TForm2::FormClose() произойдет уже после того, как сам класс будет уничтожен.
Собственно два вопроса: корректен ли такой способ удаления объекта формы? Если нет, то как это правильно делать?
Нет не корректен. Подобный вызов делита однозначно приведет к проблемам.
Парвильно
Правильно:
{
Action = caFree;
}
Читайте пожайлуйста вопрос - прежде чем что либо советовать.