析构函数和继承函数c ++

时间:2013-10-06 19:49:42

标签: c++ inheritance destructor

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

class A
{
   public:
   virtual print(){};
   ~A(){print();}
};
class B:public A
{
   public:
   print(){};
   ~B(){}
};
void main()
{
  B *b1=new B;
  delete b1;
}
在类A的析构函数中的

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

1 个答案:

答案 0 :(得分:1)

是的,没错。通过为自己调用析构函数来破坏类,然后为其父类调用析构函数,这意味着当你破坏A时,B已经消失了。如果在构造时调用基类中的虚拟覆盖函数,则会看到类似的行为。

在构造函数或析构函数中调用虚函数通常被认为是不好的做法,因为行为虽然明确定义,但可能会误导未经证实的人。即使你被发起,也很容易让自己绊倒。