Sobes.tech
Junior — Middle
117

Czy można zadeklarować destruktor jako wirtualny w klasie?

Firmy, w których zadano pytania
Astra

Odpowiedź od AI

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()
}