我已经在MS一名员工的博客中看到此表格。但是这是什么意思?我很困惑,因为他在使用新运算符后没有删除。那是完全合法的吗?还是只能在Visual C++中使用?
他博客的源代码:
(new RegForm())->ShowMaximized();
GetApplication()->Run();
最佳答案
首先,对事物进行new
而不删除它们是合法的。这可能会导致内存泄漏,但是在C++中是允许的。
在这段特定的代码中,new
生成指向对象的指针。您可以在指针上使用->
来调用对象的成员函数,因此这将创建RegForm,然后在其上调用ShowMaximized
。
我们无法通过此代码判断是否存在内存泄漏。但是,RegForm可能正在使用一种自注册模式。例如,其构造函数可能包含:
GlobalListOfObjectsToDeleteLater.push_back(this);
当应用程序关闭时,另一段代码将通过列表删除所有内容。
实际上,RegForm似乎在GUI的其他部分进行了注册,因此必须这样做才能显示出来。