Junior — Middle
134
Proč je důležité deklarovat virtuální destruktor v základní třídě při použití dědičnosti?
Společnosti byly požádány
Odpověď od 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()
}