Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpOpIhVD 73 of 150 menu
◀ ▶

Виртуальный деструктор в C++

Указатель на базу может ссылаться на объект потомка, созданный через new.

При delete через указатель на базу вызывается деструктор базы. Если он не помечен virtual, деструктор потомка не вызовется. Слово virtual перед деструктором базы включает и деструктор потомка. Запишем такую базу, выделим Student и освободим память:

#include <iostream> class User { public: virtual ~User() { std::cout << "user done\n"; } }; class Student : public User { public: ~Student() { std::cout << "student done\n"; } };

Создадим объект Student и удалим его через указатель базы:

int main() { User* ptr = new Student(); delete ptr; return 0; }

Сделайте базовый класс с виртуальным деструктором, потомка с собственным деструктором, создайте объект через new в указателе базы и удалите его - выведите оба сообщения деструкторов.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить