Управление памятью с созданием форм в C ++ Builder / Firemonkey

До сих пор в моем приложении выяснилось, что все дополнительные формы, созданные во время выполнения, должны быть модальными. Таким образом, при создании новой формы я использую что-то похожее на следующий блок кода:

void __fastcall ShowForm( TComponent * Owner )
{
TForm1 * form = new TForm1( Owner );
form->ShowModal();

delete form;
}

При таком подходе память формы легко удаляется после того, как пользователь закрыл ее.

Тем не менее, я сталкиваюсь с проблемой при попытке выяснить, как обрабатывать управление памятью для немодального диалога. Очевидно, я не могу просто вызвать delete в конце ShowForm Метод как форма будет удалена сразу после ее создания. Так что у меня осталось что-то вроде этого:

void __fastcall ShowForm( TComponent * Owner )
{
TForm1 * form = new TForm1( Owner );
form->Show();
}

На основе эта документация и тестовое приложение, которое я написал, я знаю, что form Указатель будет удален после закрытия его владельца. Однако, это все еще оставляет меня со следующим сценарием:

Допустим, у меня есть FormA с кнопкой, которая создает и показывает экземпляр FormB используя код так же, как метод выше. Теперь я нажимаю кнопку, чтобы создать FormB а затем закройте FormB, три раза. До тех пор FormA закрыто, три экземпляра FormB остаться в памяти.

Как мне управлять памятью для создания формы так, чтобы память, выделенная для формы, удалялась после закрытия формы? Существует ли стандартная лучшая практика для этого или встроенная функция, которую мне не хватает?

2

Решение

Использовать ТГогт :: FormClose событие, и установите Action параметр для caFree:

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
Action = TCloseAction::caFree;
}

Форма тогда освободится, когда закроется.

5

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector