Делаю такую штуку. Может ещё кому пригодится.
Unified Pointer Library (
описание на русском) — библиотека унифицированных указателей (UPL), содержит концепты и реализации умных указателей, которые предназначены для управления временем жизни объектов. Предоставляет указатели upl::unique и upl::shared для уникального и совместного владения объектами, слабые ссылки для них upl::weak, и добавляет унифицированный тип владения upl::unified. Публичный интерфейс унифицированных указателей схож с интерфейсом умных указателей стандартной библиотеки C++.
Ключевые особенности:
Возможность организации ассоциативных связей между объектами в соответствии с UML.
Определены концепты, которые в compile-time позволяют гибко определять тип указателей UPL в обобщённых алгоритмах.
Указатель upl::weak может ссылаться на объект, который находится под управлением upl::unique.
Указатель upl::unified позволяет передать уникальное владение объектом в цепочке, где может выполняться копирование.
С помощью upl::unified можно временно продлить время жизни объекта в заданной области видимости, что позволяет корректно завершить работу с ним, даже когда все остальные указатели на этот объект удалены.
Добавлены указатели с одинарной кратностью, которые не могут быть пустыми и всегда ссылаются на один объект.
Библиотека header-only, лицензия MIT.