Junior — Middle
138
Perché è importante dichiarare un distruttore virtuale nella classe base quando si utilizza l'ereditarietà?
Le aziende dove è stato chiesto
Risposta dell'AI
sobes.tech AI
Если в базовом классе не объявить деструктор виртуальным, при удалении объекта производного класса через указатель на базовый класс вызовется только деструктор базового класса. Это приведёт к тому, что ресурсы, выделенные в производном классе, не будут корректно освобождены, что может вызвать утечки памяти и другие ошибки. Объявление деструктора виртуальным гарантирует вызов деструкторов всех уровней и правильное освобождение ресурсов.
Пример:
class Base {
public:
virtual ~Base() { std::cout << "Base destructor\n"; }
};
class Derived : public Base {
public:
~Derived() { std::cout << "Derived destructor\n"; }
};
int main() {
Base* obj = new Derived();
delete obj; // Вызовет сначала Derived::~Derived(), затем Base::~Base()
}