📅  最后修改于: 2023-12-03 15:29:52.013000             🧑  作者: Mango
在 C++ 中,析构函数
是一种特殊的成员函数,可以在对象被销毁的时候自动调用。通常在析构函数内部释放对象所持有的资源。如果一个类有析构函数,那么它就可以自动管理资源,而不需要人工干预。
析构函数的声明和定义都是特殊的,需要以下几点注意:
~
。class Test {
public:
Test(); // 默认构造函数
Test(int data); // 带参数构造函数
~Test(); // 析构函数
private:
int mData;
};
Test::Test() : mData(0) {}
Test::Test(int data) : mData(data) {}
Test::~Test() {}
一个类的析构函数在以下情况下会被自动调用:
delete
运算符删除。auto_ptr
类型的对象,在其所在的作用域结束或者被重新赋值之前,都会自动调用析构函数释放它所管理的资源。在析构函数内部,程序员需要完成对象的最终清理工作,比如释放对象占用的内存、关闭文件、断开网络连接等等。
A:析构函数与默认构造函数、拷贝构造函数、拷贝赋值运算符一样,是 C++ 程序默认提供的三个特殊函数之一。如果一个类不需要显示分配堆内存、打开文件、建立网络连接等操作,那么通常可以不需要写析构函数,让编译器默认提供即可。
A:可以。如果一个类没有显式动态分配内存或者使用了资源管理类(比如 auto_ptr
、shared_ptr
、unique_ptr
等),那么通常不需要写析构函数。否则,如果忘记释放内存或资源,可能会导致内存泄漏和资源浪费。
A:因为析构函数需要在对象生命期结束时自动调用,如果其访问权限是私有的,那么对象的销毁工作就需要其它函数或者友元帮助完成,失去了自动释放资源的便利性。