2023年10月23日,周一上午
#include <iostream>class Book{
private:int price;
public:~Book(){std::cout<<"调用析构函数"<<std::endl; }
};int main(){Book b1;b1.~Book();
}
从运行结果可以看出:
手动调用b1.~Book()时,对象并没有被销毁,只是执行了析构函数里面的输出“调用析构函数”。假如手动调用b1.~Book()时对象被销毁了,那么不可能再次执行析构函数里面的输出“调用析构函数”,毕竟对象都没了还怎么执行。
手动调用析构函数不等于销毁对象:析构函数只是一个函数,并不能销毁对象。
但是销毁对象时会自动调用析构函数:系统销毁对象时会自动调用析构函数。
为了更好的理解这个问题,我做出如下的进一步的解释:
首先,要正确理解析构函数的作用。
析构函数是给系统来调用的,而不是给程序员来调用的。当系统销毁一个对象时会自动调用这个由程序员写好的析构函数来完成一些额外的工作,比如释放堆内存。
其次,调用析构函数并不会销毁对象。
析构函数其实就是一个普通的函数而已,唯一的特别之处就是系统销毁对象时会自动调用它,而它本身并不具有销毁对象的功能。
参考资料:
是否可以手动调用析构函数_主动调用析构函数_isyb的博客-CSDN博客答案是可以。但是有个误区要注意。虽然可以手动调用析构函数,但是对象的内存并没有释放。看一下代码示例:#include "stdafx.h"#include #include #ifdef _DEBUG#define new new(_NORMAL_BLOCK, __FILE__, __LINE__)#endifusing namespace std;class A{public:A() { cout <_主动调用析构函数https://blog.csdn.net/syb1295306116/article/details/115403688C++中为什么手动调用析构函数之后对象还能使用,按理说虽然内存还没释放但对象已经没了啊? - 知乎#include <iostream>using namespace std;class A{public:A():m_a(5){cout<<"A()&#…https://www.zhihu.com/question/470943715