Назад к вопросам
Samsung Research Center
Junior — Middle
85
При удалении объекта через указатель базового класса с определенным виртуальным деструктором, каким образом вызываются деструкторы в цепочке наследования?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Если у базового класса объявлен виртуальный деструктор, то при удалении объекта через указатель на базовый класс вызывается цепочка деструкторов начиная с самого производного класса и вверх по иерархии наследования до базового. Это гарантирует корректное освобождение ресурсов, выделенных в производных классах.
Пример:
class Base {
public:
virtual ~Base() { std::cout << "Base destructor\n"; }
};
class Derived : public Base {
public:
~Derived() override { std::cout << "Derived destructor\n"; }
};
int main() {
Base* ptr = new Derived();
delete ptr; // Вызовет сначала Derived::~Derived(), затем Base::~Base()
}
Без виртуального деструктора вызов delete через указатель базового класса приведет к неопределённому поведению и, как правило, не вызовет деструктор производного класса.