Skip to content

nktauserum/sharedptr

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 

Repository files navigation

SharedPointer

Концепция умных указателей - это основной метод управления памятью в C++. Будучи довольно-таки низкоуровневым языком, изначально он поддерживает лишь прямое управление памятью. Пусть и не напрямую через системные вызовы malloc/free как в Си, но программисту требуется самостоятельно следить за памятью, которую он выделяет.

Умные указатели служат обёрткой над сырыми указателями и берут на себя ответственность за их освобождение. Грубо говоря, они наблюдают количеством всех активных использований объекта и удаляют его, когда число всех референсов достигнет нуля. Подобную функцию выполняет и garbage collector в других языках, но уже для всех аллоцированных объектов сразу.

На чистом Си такой функционал полноценно реализовать сложно за неимением в языке полноценной системы дженериков, конструкторов и деструкторов для объектов.

Данная реализация

В моей реализации практически точно воспроизведен концепт std::shared_ptr, который берет ответственность за всё написанное выше.

Каждый объект полагается на контрольный блок, хранящий в себе информацию о количестве текущий референсов данного умного указателя в атомарном виде - потокобезопасно и lock-free. Это не идеальное решение, поскольку атомарные операции сильно дороже обычных.

Этот счётчик в контрольном блоке увеличивается по мере создания новых экземпляров объекта и уменьшается по мере их удаления. Достигается это за счёт использования конструктора копирования, который создаёт новый экземпляр на основе предыдущего, и деструктора, уничтожающего результат.

Объект по указателю внутри уничтожается вместе с последним экземпляром shared pointer - иначе говоря, когда счётчик доходит до нуля.

About

Reinventing the concept of shared pointers with C++.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages