C++中虚析构函数的作用
本文参考来源:http://blog.csdn.net/starlee/article/details/619827
在C++开发的时候,用来做基类的类的析构函数一般都是虚函数。这样做是为了当用一个基类的指针删除一个派生类的对象时,派生类的析构函数会被调用。
代码示例如下:
class ClxBase { public: ClxBase() {}; virtual ~ClxBase() {cout<<"Output from the destructor of class ClxBase."<<endl;}; virtual void DoSomething() { cout << "Do something in class ClxBase!" << endl; }; }; class ClxDerived : public ClxBase { public: ClxDerived() {}; ~ClxDerived() { cout << "Output from the destructor of class ClxDerived!" << endl; }; void DoSomething() { cout << "Do something in class ClxDerived!" << endl; }; };
int main() { ClxBase *p=new ClxDerived; //定义一个指向派生类对象的基类指针 p->DoSomething(); delete p; //删除指针 system("pause"); return 0; }
该代码的执行结果如下:
当把基类析构函数前面的virtual去掉之后,得到的结果如下:
Do something in class ClxDerived! //此时派生类的析构函数没有执行 Output from the destructor of class ClxBase
一般情况下类的析构函数里面都是释放内存资源,而析构函数不被调用的话就会造成内存泄漏。当然,并不是要把所有类的析构函数都写成虚函数。因为当类里面有虚函数的时候,编译器会给类添加一个虚函数表,里面来存放虚函数指针,这样就会增加类的存储空间。所以,只有当一个类被用来作为基类的时候,才把析构函数写成虚函数。