析构函数是构造函数的互补:当对象超出作用域或动态分配的对象被删除时,将自动调用析构函数。
析构函数可用于释放对象时构造或在对象的生命期中所获取的资源。
不管类是否定义了自己的析构函数,编译器都自动执行类中非static 数据成员的析构函数。
1、析构函数的特点
(1)、析构函数没有返回值和参数列表
(2)、析构函数不能重载
(3)、析构函数由系统自动调用,不能显式调用
(4)、析构函数可以是inline函数
(5)、析构函数应该设置为类的公有成员
(6)、每个类有应该有一个析构函数,如果没有显式定义,那么系统会自动生成一个默认的析构函数
#include <iostream> using namespace std; class ExampleA { public: ~ExampleA(){cout << "ExampleA::Deconstructor" << endl;} }; class ExampleB { public: ~ExampleB(); }; ExampleB::~ExampleB() { cout << "ExampleB::Deconstructor" << endl; } int main(void) { ExampleA a; ExampleB b; return 0; }
2、析构函数的调用顺序
http://www.cnblogs.com/LubinLew/p/Cpp-CallOrderOfConstructorAndDeconstructor.html
3、虚析构函数的作用
作用是当用一个基类的指针删除一个派生类的对象时,派生类的析构函数会被调用,
总而言之,就是在实现多态的时候不造成内存泄露。
当然,并不是要把所有类的析构函数都写成虚函数。因为当类里面有虚函数的时候,
编译器会给类添加一个虚函数表,里面来存放虚函数指针,这样就会增加类的存储空间。所
以,只有当一个类被用来作为基类的时候,才把析构函数写成虚函数。