class A { public: A(){cout << "A()"<< endl;} ~A(){cout << "~A()"<< endl;} }; class B:public A{ public: B(){cout << "B()" << endl;} ~B(){ cout << "~B()"<<endl;} }; void test_2() { A*p = new B; delete p; }
A()
B()
~A()
可以看到这种情况下,非虚函数的话,B被当做A看待,只调用了A的析构函数。
如果加上virtual,就会不一样了。
调用过程变成:
A()
B()
~B()
~A()
为什么这么说,因为首先,这是多态,那么会调用B的析构函数。
同时,因为是析构,所以一定会调用到父类的析构函数。???真的是这样吗?