C++析构函数细节

析构函数的调用问题

如果程序以exit退出,仅static变量(含function内、class内)和全局变量的析构函数会被执行,局部变量尤其是main函数里的局部变量析构函数不会执行!

如果程序收到默认终止进程的信号退出(比如core) 
所有变量的析构函数都不会执行,即使是全局变量、static变量也不执行!

变量只有离开作用域时、被销毁时 调用析构函数

指针对象only只有手动调用delete,指向内容的析构函数才会被调用!

struct Test
{
    Test(string name): _name(name) { } 
    ~Test()
    {   
        cout << "bye bye, " << _name << endl;
    }   
    string _name;
};
​
Test ins0("tong");
​
int main()
{
    Test ins("lee");
    static Test ins2("leechanx");
    while (true);
    exit(1);
}
程序输出:

bye bye, leechanx 
bye bye, tong 
是按照代码中全局、static变量定义的反顺序执行析构的~

析构函数就是个普通成员,可以显式调用
class Car {
public:
    Car() {}
    ~Car() {
        cout << "call ~Car()" << endl;
    }
};
int main()
{
   Car car;
   car.~Car();
}
程序输出

call ~Car() 
call ~Car() 
第一次是主动调用的,第二次是car对象离开作用域自动调用的

析构函数感觉上就是一个hook函数,当对象被销毁前,自动调用析构函数

转载于:https://www.cnblogs.com/cppprogamming/p/9539185.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值