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

Указатель unique_ptr на базу в C++

Статический тип unique_ptr может быть базой, а в куче лежит объект потомка.

Чтобы при уничтожении указателя сработал полный деструктор потомка, у базы нужен виртуальный деструктор. Виртуальный метод базы через -> попадет в реализацию потомка. Запишем классы User и Student:

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

Создадим Student внутри unique_ptr<User> и выведем приветствие:

int main() { std::unique_ptr<User> owner = std::make_unique<Student>(); owner->greet(); return 0; }

Сделайте базу Device с виртуальным методом label и виртуальным деструктором, потомка Phone с другим текстом. Сохраните Phone в unique_ptr<Device>, вызовите label и дождитесь автоматического удаления при выходе из main.

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