跳到主要内容

简述C++类什么时候会析构 ?

参考答案:

在C++中,类的析构函数(destructor)会在以下情况被调用:

  1. 局部对象销毁:当函数返回时,其内部创建的局部对象会被销毁,此时会调用相应的析构函数。
void func() {
    MyClass obj; // 当func函数返回时,obj的析构函数会被调用
}
  1. 静态对象销毁:当程序结束运行时,全局或静态对象会被销毁,相应的析构函数会被调用。
static MyClass obj; // 当程序结束时,obj的析构函数会被调用
  1. 动态分配的对象销毁:当使用delete操作符释放动态分配的对象时,对象的析构函数会被调用。
MyClass* obj = new MyClass; // 动态分配对象
delete obj; // 释放对象,此时会调用obj的析构函数
  1. 临时对象销毁:当临时对象(例如,在表达式中创建的对象)的生命周期结束时,其析构函数会被调用。
MyClass obj = MyClassFunction(); // 当函数返回时,返回的临时对象的析构函数会被调用
  1. 类的成员对象销毁:当包含类的成员对象的类的实例被销毁时,成员对象的析构函数会首先被调用。
class Outer {
    MyClass inner;
public:
    ~Outer() {
        // 在Outer的析构函数被调用时,首先会调用inner的析构函数
    }
};
  1. 容器销毁:当STL容器(如std::vectorstd::list等)被销毁时,容器中存储的对象的析构函数会被调用。
std::vector<MyClass> vec;
vec.push_back(MyClass()); // 添加对象到容器
// 当vec被销毁时,其内部存储的对象的析构函数会被调用

请注意,析构函数的调用顺序与构造函数的调用顺序相反。如果对象的析构函数抛出异常,std::terminate会被调用,程序会异常终止。因此,析构函数应确保不抛出异常,或者至少应该捕获并处理它们。

学习笔记
|||
说点什么吧
 
100:0
鲤跃网
http://www.sunycode.com
讲文明、要和谐
提交学习笔记