Sobes.tech
Junior — Middle

Təsisçi sinif göstəricisi ilə obyekt silərkən və virtual destruktor müəyyən edildikdə, irs zəncirində destruktorlar necə çağırılır?

sobes.tech Süni İntellekt

AI-dan cavab

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

Пример:

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