Junior — Middle
141
Warum ist es wichtig, einen virtuellen Destruktor in der Basisklasse bei Verwendung von Vererbung zu deklarieren?
Unternehmen wurden gefragt
Antwort von AI
sobes.tech KI
Если в базовом классе не объявить деструктор виртуальным, при удалении объекта производного класса через указатель на базовый класс вызовется только деструктор базового класса. Это приведёт к тому, что ресурсы, выделенные в производном классе, не будут корректно освобождены, что может вызвать утечки памяти и другие ошибки. Объявление деструктора виртуальным гарантирует вызов деструкторов всех уровней и правильное освобождение ресурсов.
Пример:
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()
}