析构函数的调用问题
如果程序以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函数,当对象被销毁前,自动调用析构函数