典型的应用程序如下所示:
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
在我Run()
发生的事情之后,它等待处理所有消息循环事件,然后将Running
属性设置为false
。但是,在程序结束之前,表单尚未销毁。
在David Heffernan的评论之后我修改了这个问题:
如何确保Run()
之后表单已被销毁,或者如何销毁CreateForm
创建的表单?是否有DestroyForm()
或类似的等价物?
答案 0 :(得分:2)
您的表单未明确销毁。所以它的寿命由它的主人决定。当它的主人被摧毁时,它就会被摧毁。所有者是Application
,在VCL单元完成阶段被销毁。所以你的形式也被摧毁了。
您希望知道如何在表单被其所有者自动销毁之前销毁该表单。这很简单:当你需要它被销毁时就把它摧毁。
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
delete Form1;
答案 1 :(得分:2)
如何在Run()
之后确保表单已被销毁
VCL确保为您服务。 CreateForm()
将Application
设置为表单的所有者。在Application
退出后,VCL的清理逻辑释放WinMain()
对象时,它将释放它拥有的所有内容。
如何销毁由CreateForm创建的表单?
如果您想手动释放它,您只需delete
:
delete Form1;
表单将从其所有者中删除,因此不会再次释放它。
是否有DestroyForm()或类似的等价物?
不,也不需要。只需delete
,就像您使用new
而不是CreateForm()
创建它一样。