对象超出范围后未调用析构函数
destructor is not being called after object goes out of scope
考虑这个例子:
#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 只有一个编译错误; 但对于本地对象则不是? 这里发生了什么?
这一行实际上声明了一个函数,而不是一个变量。
MyClass test();
如果要更改为统一初始化语法,则会看到两个 destuctor 调用
MyClass test{};
或
auto test = MyClass();
"MyClass test((;" - 你想写MyClass test;
- 你不是在创建一个对象,你是在声明一个函数"test",它不接受参数并返回一个"MyClass"。
相关文章:
- 什么时候调用析构函数
- C++-明确何时以及如何调用析构函数
- C++ 防止在映射中放置()时调用析构函数
- 调用析构函数以释放动态分配的内存
- C++:使用方法调用析构函数的顺序是什么?
- 向量推回调用析构函数时调用析构函数
- 如何在调用析构函数时优雅地停止/销毁带有阻塞调用C++线程?
- C++,我应该调用析构函数吗?
- 如何获取有关在 Clang LibTooling 中调用析构函数的信息?
- 当我从 std::vector 中的新放置调用析构函数时会发生什么?
- 为什么这里不调用析构函数
- 在调用 std::bind 的产品后意外调用析构函数
- 为什么在传递给函数而不是构造函数时调用析构函数?
- 如何在C++中调用析构函数
- 为什么为未删除的对象调用析构函数?
- 调用析构函数时出错
- C++ 在不释放内存的情况下调用析构函数
- 为什么在运算符删除中不调用析构函数?
- C++ 调用析构函数后动态模板队列"double free or corruption (out)"
- 在 postOrderDelete 上调用析构函数时引发的异常