【PL】【C/C++】析构函数触发条件

析构函数的触发条件是当一个对象的生命周期结束时,即该对象被销毁时,会自动调用其析构函数。析构函数的调用时机有以下几种情况:

  1. 对象在栈上创建:当一个对象在栈上创建时,它的析构函数会在该对象所在的作用域结束时自动调用。
void foo() {
    Animal animal;
    // ...
} // animal 的析构函数会在这里自动调用

在上面的例子中,当 foo() 函数执行完毕时,animal 对象所在的作用域结束,它的析构函数会自动调用。

  1. 对象在堆上创建:当一个对象在堆上创建时,它的析构函数需要手动调用 delete 运算符来触发。
void foo() {
    Animal* animal = new Animal();
    // ...
    delete animal; // animal 的析构函数会在这里手动调用
}

在上面的例子中,当 delete animal 执行时,animal 对象的析构函数会被手动调用。

  1. 对象作为成员变量:当一个对象作为另一个对象的成员变量时,它的析构函数会在包含它的对象的析构函数中自动调用。
class Person {
public:
    ~Person() {
        delete animal; // animal 的析构函数会在这里自动调用
    }
private:
    Animal* animal;
};

void foo() {
    Person person;
    // ...
} // person 的析构函数会在这里自动调用,从而触发 animal 的析构函数

在上面的例子中,当 person 对象所在的作用域结束时,它的析构函数会自动调用,从而触发 animal 对象的析构函数。

需要注意的是,当一个对象被销毁时,它的成员变量的析构函数会在它自己的析构函数之前被调用,因此在编写析构函数时需要注意成员变量的销毁顺序。

你可能感兴趣的:(Linux,C/C++,c++,开发语言)