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的析构函数。

同时,因为是析构,所以一定会调用到父类的析构函数。???真的是这样吗?

 

posted on 2019-03-26 17:39  newbird2017  阅读(110)  评论(0编辑  收藏  举报