Учебная реализация
UniquePtr,SharedPtrиWeakPtrна C++
Умные указатели нужны, чтобы управлять временем жизни объектов не вручную (через new/delete),
а при помощи небольших классов-оберток с понятной семантикой владения.
В этом проекте представлены три основные модели:
UniquePtr— владелец объекта ровно одинSharedPtr— владельцев может быть несколькоWeakPtr— объектом не владеет, но может безопасно проверить, жив ли он еще
control_block.h— базовый control block и хранение счетчиков ссылокdefault_delete.h— дефолтный deleterunique_ptr.h,shared_ptr.h,weak_ptr.h— реализации
Хранит сырой указатель и удаляет объект в деструкторе через deleter.
Поддерживает такие сценарии:
- создание через
make_unique - передача владения через move
- отказ от владения через
release - замена объекта через
reset
В основе лежит control block, внутри которого находятся:
- счетчик сильных ссылок
- счетчик слабых ссылок
- логика уничтожения объекта
- логика удаления самого control block
Когда уничтожается последний SharedPtr, удаляется сам объект. Когда после этого исчезает и последний WeakPtr,
удаляется уже сам control block.
MacBook :: ((somewhere)) >> cmake -S . -B build
MacBook :: ((somewhere)) >> cmake --build build
MacBook :: ((somewhere)) >> ./build/src/smart_pointers