在Builder(或Delphi)中创建TForm时,将代码添加到main以在应用程序启动时创建这些表单:
Application->CreateForm( __classid( TxForm),&xForm );
这使事情变得更容易,但是当应用程序有10,20,50,100个表单时它是否明智?我假设这可以抓住各种内存和系统句柄.通过使用Project-> Options-> Forms对话框删除表单,可以在需要时随时创建表单,并且:
std::auto_ptr< TxForm > myForm( new TxForm( this )); myForm->ShowModal();
所以问题是,哪个更好,让C Builder以自己的方式执行,或者在需要时手动创建表单?
解决方法
创建但尚未可见的表单占用内存并使启动时间生效,但不应使用任何系统句柄,因为窗口句柄之类的东西在实际显示窗口之前不会分配.
话虽如此,我几乎总是手动创建表单(使用类似于你的auto_ptr的代码),因为我不能忍受全局变量.手动创建表单有一些优点:更快的应用程序启动,表单始终以已知良好状态显示,并且如果需要,以后更容易切换到一次显示表单的多个实例.
作为the VCL documentation explains,直接(或通过使用stock std :: auto_ptr)间接删除表单可能会导致内存错误,因为表单可能包含未处理的消息.为了避免这个问题,我编写了两个智能指针类,负责调用Release而不是delete.您可以从http://gist.github.com/671452下载它们.