考虑这个例子:
#include <iostream>
using namespace std;
class MyClass
{
public:
~MyClass() { cout << "DTOR OK !" << endl; }
};
int main(void)
{
MyClass test();
MyClass* pTest = new MyClass();
delete pTest;
}
为什么“DTOR OK!”不打印两次?为什么没有调用本地对象“test”的析构函数?
当析构函数是私有的时,我注意到删除pTest只有编译错误;但不是本地对象?这里发生了什么?
答案 0 :(得分:7)
这一行实际上声明了一个函数,而不是一个变量。
MyClass test();
如果您要更改为统一初始化语法,则会看到两个destuctor调用
MyClass test{};
或
auto test = MyClass();
答案 1 :(得分:2)
&#34; MyClass test();&#34; - 你想写MyClass test;
- 你没有创建一个对象,你正在声明一个函数&#34; test&#34;不带参数并返回&#34; MyClass&#34;。