Skip to content

ik4rd/smart-pointers

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🙋‍♂️ About

Учебная реализация UniquePtr, SharedPtr и WeakPtr на C++


Про умные указатели

Умные указатели нужны, чтобы управлять временем жизни объектов не вручную (через new/delete), а при помощи небольших классов-оберток с понятной семантикой владения.

В этом проекте представлены три основные модели:

  1. UniquePtr — владелец объекта ровно один
  2. SharedPtr — владельцев может быть несколько
  3. WeakPtr — объектом не владеет, но может безопасно проверить, жив ли он еще

Что внутри

  • control_block.h — базовый control block и хранение счетчиков ссылок
  • default_delete.h — дефолтный deleter
  • unique_ptr.h, shared_ptr.h, weak_ptr.h — реализации

Как это работает?

UniquePtr

Хранит сырой указатель и удаляет объект в деструкторе через deleter.

Поддерживает такие сценарии:

  • создание через make_unique
  • передача владения через move
  • отказ от владения через release
  • замена объекта через reset

SharedPtr / WeakPtr

В основе лежит 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

About

Учебная реализация умных указателей на C++

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors