【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 对象的析构函数。

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值