Sobes.tech
Назад к вопросам
Junior — Middle
86

Можно ли объявить деструктор как виртуальный в классе?

Компании, где спрашивали
Astra

Ответ от нейросети

sobes.tech AI

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

Пример:

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* obj = new Derived();
    delete obj; // Вызовет сначала Derived::~Derived(), затем Base::~Base()
}