Детрукторы и унаследованные функции c ++

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, потому что, когда он находится в деструкторе класса A, класс B технически разрушен?

Теги:
inheritance
destructor

1 ответ

1
Лучший ответ

Да все верно. Класс разрушается путем вызова деструктора для себя, а затем деструктор для его родительских классов, что означает, что к тому времени, когда вы уничтожили A, B, уже исчез. Вы увидите подобное поведение, если при создании вы вызываете виртуальные, переопределяете функции в базовых классах.

Обычно считается неправильной практикой вызывать виртуальные функции в конструкторах или деструкторах, поскольку поведение, хотя и четко определено, может вводить в заблуждение непосвященному. Кроме того, вы можете легко подняться, даже если вы начали.

  • 0
    Я немного новичок в C ++, поэтому меня тоже немного обманули, пока я не заметил кое-что, что не имело для меня смысла, спасибо за совет

Ещё вопросы

Сообщество Overcoder
Наверх
Меню