Sobes.tech
Junior — Middle
116

Ar galima deklaruoti destruktorį kaip virtualų klasėje?

Įmonės kur klausė
Astra

Atsakymas iš 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()
}