我在MS的一名员工的博客中看过这个表格。但是这是什么意思?我很困惑,因为在使用new运算符后没有删除。这完全合法吗?或者它只能在Visual C ++中使用?
他博客的源代码:
(new RegForm())->ShowMaximized();
GetApplication()->Run();
答案 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
时,所有内存都将被清除。