一个虚析构函数的有关问题
一个虚析构函数的问题C/C++ codeclass Base{public:virtual ~Base(){std::cout ~Base() std::end
一个虚析构函数的问题
C/C++ codeclass 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
[解决办法][解决办法]这就是继承++