什么情况下析构函数会自动调用
对象的生命周期结束时,会自动调用析构函数。在 C++ 中,对象的生命周期通常由其作用域来管理。当对象超出其作用域时,编译器会自动调用对象的析构函数来释放资源。这适用于以下几种情况:
- 对象在函数内部作为局部变量:当函数执行结束时,局部对象的生命周期也结束,析构函数会被自动调用。
- 对象作为类的成员变量:当包含该对象的类的实例销毁时,其成员变量的析构函数会被自动调用。
- delete:如果通过
new
关键字动态分配了对象,当使用delete
删除该对象时,析构函数会被自动调用。 - 全局变量,静态变量在程序终止时也会生命周期结束,自动调用析构。
所以,如果对象的生命周期已经结束,它的析构函数就会被自动调用。
什么时候析构函数不会自动调用
在 C++ 中,使用 new
创建的对象的生命周期不会自动结束。相反,它会一直存在,直到显式调用 delete
来释放分配给对象的内存空间。一旦你调用了 delete
,对象的生命周期就结束了,其析构函数会被调用,释放对象占用的内存,并执行其他必要的清理工作。
总结
只有new出来的对象不会自动调用析构函数,必须手动delete。