Собственная реализация умных указателей в соответствии с C++20.
- Код хорошо покрыт тестами, проверяется корректное освободжение памяти, отсуствие утечек
- Используется эффективная реализация, в UniquePtr хранится самописная CompressedPair, для использования EBO.
Иногда объект, созданный на куче, нужно передавать в кучу функций, методов и т.д. В такой ситуации становится сложно уследить за лайфтаймом объекта и моментом, когда нужно освобождать выделенную под объект память.
Хотелось бы пользоваться удобной обёрткой, которая автоматически будет выделять память при создании объекта и освобождать память, когда объект больше не используется --- ровно для этого и существуют умные указатели.
Умные указатели бывают разные. В рамках этого проекта мы рассмотрим три типа, которые отличаются между собой семантикой владения:
- UniquePtr является единственным владельцем объекта.
- SharedPtr позволяет множественное владение.
- IntrusivePtr позволяет множественное владение, как и SharedPtr, использование IntrusivePtr накладывает определенные ограничения на пользовательский тип.