未调用析构函数
Destructor not being called
根据: http://www.cplusplus.com/doc/tutorial/classes/
析构函数实现构造函数的相反功能。当对象被销毁时,它会自动调用,要么是因为它的存在范围已经完成(例如,如果它被定义为函数中的本地对象并且函数结束),要么是因为它是一个动态分配的对象,并且使用运算符 delete 释放它。
示例代码:
class Something
{
public:
Something() {cout << "construction called" << endl; }
~Something() { cout << "destruction called" << endl; }
};
void foo(){
Something *ob = new Something();
}
int _tmain(int argc, _TCHAR* argv[])
{
foo();
}
这是真的,但是您在动态内存中分配对象,这意味着在您调用 delete
之前它不会被破坏。
因为它是动态分配的对象,并且使用运算符 Delete 释放。
你从不调用删除。尔格内存泄漏和未调用析构函数:
void foo(){
Something *ob = new Something();
delete ob;
}
要么这样,要么只是在自动内存中分配对象:
void foo(){
Something ob;
}
或者将内存管理委托给智能指针。
在
销毁对象之前调用析构函数。由于您使用 new
分配了对象,因此必须手动显式销毁它,并通过在指向该对象的指针上调用 delete
来释放它占用的内存。
如果对象是在自动存储中创建的,则
Something ob;
对象将自动销毁,析构函数将在对象返回时超出范围foo
调用。
相关文章:
- 析构函数调用
- 在具有向量的类构造函数中进行析构函数调用
- 从 c++ 中派生类的析构函数调用虚函数
- C++析构函数调用两次,堆栈分配的复合对象
- C++ 在析构函数调用之前删除的动态成员数组
- 析构函数调用c++中的一个向量
- Singleton模式中的手动析构函数调用:调用多次
- 从内部类的析构函数调用虚拟函数
- 与 boost odeint 集成期间的析构函数调用
- 堆栈展开如何与析构函数调用有关?
- C++:优化析构函数调用
- 以逗号分隔的表达式中的析构函数调用
- GCC 9.1 返回 void& 作为显式析构函数调用的结果类型。这是一个错误吗?
- 从C++中的虚拟析构函数调用虚拟方法
- 从指针返回对象时出现意外的析构函数调用
- 使用 decltype 显式析构函数调用
- C++析构函数调用了错误的对象
- 了解虚拟函数和析构函数调用
- 多重继承析构函数调用他自己和父析构函数?c++
- 析构函数调用表单不适当的库