общие, слабые и ленивые указатели в C ++

Кто-нибудь знает о реализацииshared_ptr а такжеweak_ptr вместе с ленивым партнером инициализации? Требования классов были:

A lazy_ptr класс, который позволяет клиенту построить объект позже (если вообще), без необходимости реализации конструктора

A weak_lazy_ptr класс с тремя возможными состояниями: еще не создан (не будет привязан кshared_ptr), построенный (будетshared_ptr) и уничтожен (не будет привязан кshared_ptr)

Я создал несколько классов, которые не делали работу совсем недавно (см. статью CVU здесь) который использовалshared_ptr а такжеweak_ptr в их реализации. Основные проблемы с моделью, которую использует USES, и слабые указатели вместо интеграции с ними:

Раз всеlazy_ptr объекты выходят из области видимости, любые слабые ссылки больше не могут быть заблокированы, даже если другие клиенты удерживаютshared_ptr версии

Строительство объектов на разных нитях не поддается контролю

Я был бы признателен за любые указания на другие попытки примирить эти проблемы, или на любую работу, которая ведется в этой области.