第一种,析构没有写成虚函数,看看会怎样:

class A {
public:
    A() { cout << "con in A" << endl; }
     ~A() { cout << "~A" << endl; }

};
class B :public A {
public:
    B() { cout << "B()" << endl; }
    ~B() { cout << "~B()" << endl; }
};

void f()
{
    A* p = new B;
    delete p;
}

执行结果,在delete p的时候,只调用了A的析构函数。没有调用B的析构函数。

 

下面修改成虚函数,就正常了。

class A {
public:
    A() { cout << "con in A" << endl; }
    virtual  ~A() { cout << "~A" << endl; }

};
class B :public A {
public:
    B() { cout << "B()" << endl; }
    ~B() { cout << "~B()" << endl; }
};

void f()
{
    A* p = new B;
    delete p;
}

 

posted on 2017-12-28 21:16  newbird2017  阅读(129)  评论(0)    收藏  举报