Зачем нужен виртуальный деструктор?



Ответ: Чтобы избежать возможной утечки ресурсов или другого неконтролируемого поведения объекта, в логику работы которого включен вызов деструктора.



Пример:



class Base

{

public:

virtual ~Base()

{

std::cout << "Hello from ~Base()" << std::endl;

}

};



class Derived : public Base

{

public:

virtual ~Derived()

{

// Здесь могла бы быть очистка ресурсов

std::cout << "Hello from ~Derived()" << std::endl;

}

};



Base *obj = new Derived();

delete obj;



Output:

Hello from ~Derived()

Hello from ~Base()




Без ключевого слова virtual у родительского класса Base деструктор порожденного класса не был бы вызван. Т.е. вызвался бы только ~Base():



Output:

Hello from ~Base()





#cpp #programming



👉 @cpp_lib