Managing memory with form creation in C++ Builder / Firemonkey

  

So far, in my application it has worked out that all additional forms that were created at runtime, should be modal. Thus, when creating a new form I use something similiar the following block of code:

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

delete form;
}

With this approach, the form’s memory is easily deleted after the user has closed it.

However, I am running into an issue when trying to figure out how to handle memory management for a non modal dialog. Obviously, I can’t simply call delete at the end of the ShowForm method as the form would be deleted right after it was created. So I am left with something like this:

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

Based on this documentation and a test application I have written, I know that the form pointer will be deleted once its owner has been closed. However, that still leaves me with the following scenario:

Lets say I have FormA with a button that creates and shows an instance of FormB using code just like the method above. I now click the button to create a FormB and then close FormB, three times. Until FormA is closed, the three instances of FormB remain in memory.

How do I manage memory for form creation such that the memory allocated for a form is deleted once that form is closed? Is there a standard best practice for this, or a built in feature I am missing?

Comments are closed.