Виртуальные функции и деструкторы
Что делает ключевое слово virtual?
Ключевое слово virtual в C++ используется для создания виртуальных функций, которые могут быть переопределены в производных классах, обеспечивая полиморфизм.
virtual позволяет динамически определять, какую версию функции
вызывать, основываясь на типе объекта, на который указывает указатель или
ссылка.
class Base {
public:
virtual void display() {
std::cout << "Base display" << std::endl;
}
};
class Derived : public Base {
public:
void display() override {
std::cout << "Derived display" << std::endl;
}
};
Base* obj = new Derived();
obj->display(); // Вызывает Derived::display() благодаря virtual
Может ли деструктор быть виртуальным?
Да, деструктор может быть виртуальным. Это необходимо для корректного освобождения ресурсов при удалении объекта через указатель на базовый класс.
Пример:class Base {
public:
virtual ~Base() {
// Деструктор базового класса
}
};
class Derived : public Base {
public:
~Derived() {
// Деструктор производного класса
}
};
Base* obj = new Derived();
delete obj; // Вызывает корректные деструкторы благодаря virtual
Использование виртуального деструктора гарантирует, что при удалении объекта через указатель на базовый класс будут вызваны деструкторы как базового, так и производного классов.