【发布时间】:2010-06-05 12:50:17
【问题描述】:
嘿,为什么在这个程序结束时基析构函数被调用了两次?
#include <iostream>
using namespace std;
class B{
public:
B(){
cout << "BC" << endl; x = 0;
}
virtual ~B(){
cout << "BD" << endl;
}
void f(){
cout << "BF" << endl;
}
virtual void g(){
cout << "BG" << endl;
}
private:
int x;
};
class D: public B{
public:
D(){
cout << "dc" << endl; y = 0;
}
virtual ~D(){
cout << "dd" << endl;
}
void f(){
cout << "df" << endl;
}
virtual void g(){
cout << "dg" << endl;
}
private:
int y;
};
int main(){
B b, * bp = &b;
D d, * dp = &d;
bp->f();
bp->g();
bp = dp;
bp->f();
bp->g();
}
【问题讨论】:
-
因为有两个基础 obj.. 一个直接 b 另一个包裹在派生 d 中。最后需要摧毁两者。
标签: c++ gcc polymorphism virtual-destructor