【发布时间】:2016-04-20 13:09:25
【问题描述】:
我对下面sn-p的结果有些疑惑。先感谢您! 为什么不调用 B1 析构函数?在我看来,“Dest B”应该显示在“Dest A”之前 任何解释将不胜感激。
class A1 {
public:
A1() { cout << "Const A" << endl; }
~A1() { cout << "Dest A" << endl; }
virtual const char* ClassName() const{ return ("A"); }
};
class B1:public A1 {
public:
B1() { cout << "Const B" << endl; }
~B1() { cout << "Dest B" << endl; }
virtual const char* ClassName() const { return ("B"); }
};
void foo1(A1 *a1)
{
cout << "foo1 has been passed an object of class " << a1->ClassName() << endl;
delete a1;
}
int main()
{
B1 *b1 = new B1;
foo1(b1);
return 0;
}
【问题讨论】:
-
你有什么“疑问”?你有什么问题?
-
您向我们展示的代码没有调用任何析构函数,并且与您展示的输出不匹配。它甚至没有编译,想想吧。
-
抱歉我的编辑不好。现在问题已正确编辑。
标签: c++ inheritance destructor