Sobes.tech
Back to questions
Junior — Middle
86

При удалении объекта через указатель базового класса с определенным виртуальным деструктором, каким образом вызываются деструкторы в цепочке наследования?

Companies where asked
Samsung Research CenterSamsung Research Center

Answer from AI

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 через указатель базового класса приведет к неопределённому поведению и, как правило, не вызовет деструктор производного класса.