什么(new Class()) - > Function();意思?

时间:2014-12-23 07:11:55

标签: c++ visual-c++ syntax

我在MS的一名员工的博客中看过这个表格。但是这是什么意思?我很困惑,因为在使用new运算符后没有删除。这完全合法吗?或者它只能在Visual C ++中使用?

他博客的源代码:

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

2 个答案:

答案 0 :(得分:4)

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

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

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

GlobalListOfObjectsToDeleteLater.push_back(this);

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

事实上,似乎RegForm可以将自己注册到GUI的其他部分,为了能够自我展示,它必须这样做。

答案 1 :(得分:0)

完全相同
RegForm* pForm = new RegForm();
pForm->ShowMaximized();

没有严格而严格的规则,即在结束程序之前删除所有new s。程序员应该知道他做了什么,避免内存泄漏(特别是在重复性任务中)。顺便说一句,当应用程序exit时,所有内存都将被清除。