Gre*_*ndt 6 delphi vcl c++builder
在Builder(或Delphi)中创建TForm时,会main在应用程序启动时添加代码以创建这些表单:
Application->CreateForm( __classid( TxForm), &xForm );
Run Code Online (Sandbox Code Playgroud)
这使事情变得更容易,但是当应用程序有10,20,50,100个表单时它是否明智?我假设这可以抓住各种内存和系统句柄.通过使用Project-> Options-> Forms对话框删除表单,可以在需要时随时创建表单,并且:
std::auto_ptr< TxForm > myForm( new TxForm( this ));
myForm->ShowModal();
Run Code Online (Sandbox Code Playgroud)
所以问题是,哪个更好,让C++ Builder以自己的方式完成它,或者在需要时手动创建表单?
这实际上取决于您在应用程序中使用表单的方式.我通常在需要时动态创建它们,然后在完成后释放它们.这是更多的手工工作,但节省了资源(每次都会花费一点点CPU,这可能会导致延迟).
如果您很少使用表单,我会在需要时手动创建/免费(删除),但如果您在应用程序的整个生命周期中使用表单,请使用默认方式.
建议让IDE"按照自己的方式行事"意味着IDE正在采用某种智能来生成用于创建表单和数据模块的代码.事实并非如此.它只是创建你告诉它创建的内容,并按照你告诉它使用的顺序.如果您没有通过项目选项对话框明确告诉它该做什么,那么它只是按照您将它们添加到项目中的顺序创建.IDE并不比你更了解.
使用自动创建的表单和数据模块可以鼓励使用IDE声明的全局变量来引用这些对象.你不需要它们.
仅自动创建主表单.当您需要其他任何东西时,使用创建对象的典型方法自己创建它:调用构造函数,并将对象的引用存储在本地变量或其他对象的字段中,而不是IDE应提供的全局变量.不要打扰CreateForm.我写了一篇解释原因的文章.
已创建但尚未可见的表单会占用内存并影响启动时间,但不应使用任何系统句柄,因为在实际显示窗口之前不会分配窗口句柄等内容。
话虽如此,我几乎总是手动创建表单(使用类似于您的代码auto_ptr),因为我无法忍受全局变量。手动创建表单具有一些优点:应用程序启动速度更快,表单始终以已知的良好状态显示,并且如果需要,以后更容易切换到一次显示表单的多个实例。
正如VCL 文档所解释的,delete直接(或通过使用 stock 间接)调用表单std::auto_ptr可能会导致内存错误,因为表单可能有未处理的消息。为了避免这个问题,我编写了两个智能指针类来负责调用Release而不是delete. 您可以从http://gist.github.com/671452下载它们。
| 归档时间: |
|
| 查看次数: |
1296 次 |
| 最近记录: |