经典指数          
原因
3232
浏览数
0
收藏数
 

有如下程序段:
#include <iostream>
using namespace std;

class A {
    public:
    ~A() {
        cout << "~A()";
    }
};
class B{
    public:
    virtual ~B() {
    cout << "~B()";
}
};
class C: public A, public B {
    public:
    ~C() {
        cout << "~C()";
    }
};
int main() {
    C * c = new C;
    B * b1 = dynamic_cast<B *>(c);
    A * a2 = dynamic_cast<A *>(b1);
    delete a2;
}
则程序输出:
  • ~C()~B()~A()
  • ~C()~A()~B()
  • A)B)都有可能
  • 以上都不对

     举报   纠错  
 
切换
1 个答案

动态的多态通过虚函数实现,基类指针指向派生类的对象,若指针调用的函数派生类中存在,且在基类中声明为虚函数,则调用的函数是派生类中的函数。

析构函数总是要声明为虚函数,这样析构时,先调用派生类的析构函数,再调用基类的析构函数,防止内存造成泄露

A类的析构函数未声明为虚函数,所以A类的指针,只可以调用A类的析构函数

 
切换
撰写答案