0

如果我有两个这样的课程:

class A
{
   public:
   virtual print(){};
   ~A(){print();}
};
class B:public A
{
   public:
   print(){};
   ~B(){}
};
void main()
{
  B *b1=new B;
  delete b1;
}

在 A 类的析构函数中,它是否从 A 类而不是 B 调用 print,因为当它在 A 类析构函数中时,B 类在技术上被破坏了?

4

1 回答 1

1

是的,这是正确的。一个类通过调用自身的析构函数来销毁,然后调用其父类的析构函数,这意味着当你销毁 A 时,B 已经消失了。如果在构造时调用基类中的虚拟覆盖函数,您将看到类似的行为。

在构造函数或析构函数中调用虚函数通常被认为是不好的做法,因为这种行为虽然定义明确,但可能会误导初学者。即使您被启动,也很容易绊倒自己。

于 2013-10-06T19:55:30.677 回答