读书人

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

发布时间: 2012-09-23 10:28:11 作者: rapoo

一个虚析构函数的问题

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

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

读书人网 >C++

热点推荐