首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个虚析构函数的有关问题

2012-09-23 
一个虚析构函数的问题C/C++ codeclass Base{public:virtual ~Base(){std::cout ~Base() std::end

一个虚析构函数的问题

C/C++ code
class Base{public:    virtual ~Base()    {        std::cout << " ~Base()" << std::endl;    }};class Derive1 : public Base{public:     ~Derive1()    {        std::cout << " ~Derive1()" << std::endl;    }};class Derive2 : public Derive1{public:    ~Derive2()    {        std::cout << " ~Derive2()" << std::endl;    }};class Derive3 : public Derive2{public:    ~Derive3()    {        std::cout << " ~Derive3()" << std::endl;    }};void main(){    Derive1 *pObj = new Derive3();    delete pObj;}


上面代码的运行结果是:
~Derive3()
~Derive2()
~Derive1()
~Base()



如果Derive1 不继承 Base,那结果就是 ~Derive1()

为什么?

而且即便Base是实析构,Derive1是虚析构,仍然会四个析构全调用。

莫非只要其中一个类的析构函数是虚的,这一串类就都具备虚析构函数的功能了?



[解决办法]
那就是呗,我只知道在设计基类的时候如果希望析构函数必须被调用就加虚
[解决办法]
继承了Base后,继承体系的析构函数都是虚函数。如果不继承的话,你delete掉pObj后会调用pObj的析构函数。而pObj就是Derived1
[解决办法]
继承了Base后,继承体系的析构函数都是虚函数。如果不继承的话,你delete掉pObj后会调用pObj的析构函数。而pObj就是Derived1
[解决办法]
探讨
继承了Base后,继承体系的析构函数都是虚函数。如果不继承的话,你delete掉pObj后会调用pObj的析构函数。而pObj就是Derived1

[解决办法]
这就是继承++

热点排行