【发布时间】:2011-03-07 13:31:42
【问题描述】:
从 TForm 派生的单个类似乎会保留 GDI 句柄,直到应用程序关闭。
class TTestForm : public TForm {
public:
TTestForm(TComponent*);
};
std::auto_ptr<TTestForm> test(new TTestForm(NULL));
test->ShowModal();
我对 VCL 很陌生,所以请多多包涵。此测试是使用不包含控件的表单完成的。据我所知,如果没有指定所有者,所有对象都归应用程序所有。
我的应用程序动态创建(和销毁)许多表单。每次显示窗体时分配 3-4 个新的 GDI 句柄。有没有办法在应用程序生命周期内显式释放这些 GDI 句柄?
【问题讨论】:
-
你在哪里声明 auto_ptr?如果它在全局范围内,如上所示,它不会超出范围,因此不会调用对象的析构函数。 (当你使用NULL作为Owner时,意味着你将管理销毁,它不会由VCL自动完成)
-
@David:不,这只是一个简化的例子。 auto_ptr 通常在另一个表单的成员函数中创建。我确实想管理破坏。但是,当 auto_ptr 超出范围时,每次似乎都会泄漏 3-4 个 GDI 句柄。
标签: delphi resources c++builder gdi