C++ - 虚析构函数

2016-01-27  本文已影响198人  Mitchell

为什么要使用虚析构函数

#include <iostream>
using namespace std;
class CSon {
public:~CSon(){cout<<"Son"<<endl;};    
};
class CGrandson:public CSon {
public:~CGrandson(){cout<<"CGrandson"<<endl;};
};
int main(int argc, const char * argv[]) {
    //基类指针指向 派生类对象
    CSon *p = new CGrandson;
    //调用析构函数的时候会调用基类的析构函数,而没有调用派生类的析构函数,这样会导致垃圾内存的出现
    delete p;
    return 0;
}

打印: Son


虚析构函数所解决的问题


虚析构函数

#include <iostream>
using namespace std;
class CSon {
public:virtual~CSon(){cout<<"Son"<<endl;};  
};
class CGrandson:public CSon {
public:~CGrandson(){cout<<"CGrandson"<<endl;};
};
int main(int argc, const char * argv[]) {
    //基类指针指向 派生类对象
    CSon *p = new CGrandson;
    //调用析构函数的时候会调用基类的析构函数,而没有调用派生类的析构函数,这样会导致垃圾内存的出现
    delete p;
    return 0;
}

调用结果
CGrandson
Son
这样就实现了先析构派生类对象,再析构基类。

上一篇 下一篇

猜你喜欢

热点阅读