Junior — Middle
118
Може ли да се објави деструктор као виртуелан у класи?
Компаније где су питане
Astra
Одговор од АИ
sobes.tech АИ
Да, в 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()
}