我已经在MS一名员工的博客中看到此表格。但是这是什么意思?我很困惑,因为他在使用新运算符后没有删除。那是完全合法的吗?还是只能在Visual C++中使用?

他博客的源代码:

(new RegForm())->ShowMaximized();
GetApplication()->Run();

最佳答案

首先,对事物进行new而不删除它们是合法的。这可能会导致内存泄漏,但是在C++中是允许的。

在这段特定的代码中,new生成指向对象的指针。您可以在指针上使用->来调用对象的成员函数,因此这将创建RegForm,然后在其上调用ShowMaximized

我们无法通过此代码判断是否存在内存泄漏。但是,RegForm可能正在使用一种自注册模式。例如,其构造函数可能包含:

GlobalListOfObjectsToDeleteLater.push_back(this);

当应用程序关闭时,另一段代码将通过列表删除所有内容。

实际上,RegForm似乎在GUI的其他部分进行了注册,因此必须这样做才能显示出来。

08-06 11:15