考虑这个例子:
#include <iostream>
using namespace std;
class MyClass
{
public:
~MyClass() { cout << "DTOR OK !" << endl; }
};
int main(void)
{
MyClass test();
MyClass* pTest = new MyClass();
delete pTest;
}
Run Code Online (Sandbox Code Playgroud)
为什么"DTOR OK!" 不打印两次?为什么不调用本地对象"test"的析构函数?
当析构函数是私有的时,我注意到删除pTest只有编译错误; 但不是本地对象?这里发生了什么事 ?
这一行实际上声明了一个函数,而不是一个变量.
MyClass test();
Run Code Online (Sandbox Code Playgroud)
如果要更改为统一初始化语法,则会看到两个destuctor调用
MyClass test{};
Run Code Online (Sandbox Code Playgroud)
要么
auto test = MyClass();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
190 次 |
最近记录: |