Кто-нибудь знает о реализации shared_ptr
и weak_ptr
вместе с ленивым партнером по инициализации? Требования к классам были:
Класс
lazy_ptr
, который позволяет клиенту создать объект позже (если вообще) без необходимости реализации конструктора.Класс
weak_lazy_ptr
, который имеет три возможных состояния: еще не построен (не будет привязан кshared_ptr
), построен (будет привязан кshared_ptr
) и уничтожен (не будет привязан кshared_ptr
)
Некоторое время назад я создал несколько классов, которые не полностью выполняли свою работу (см. статью CVu здесь), которые использовали shared_ptr
и weak_ptr
в своей реализации. Основные проблемы с моделью, которая ИСПОЛЬЗУЕТ общие и слабые указатели вместо интеграции с ними, следующие:
Как только все объекты
lazy_ptr
выходят из области действия, любые слабые ссылки больше не могут быть заблокированы, даже если другие клиенты владеют версиямиshared_ptr
.Построение объектов в разных потоках не может контролироваться
Я был бы признателен за любые указания на другие попытки примирить эти проблемы или на любую незавершенную работу, которая может быть в этой области.
shared_ptr<boost::optional<T>>
, верно? - person GManNickG   schedule 03.12.2011boost::optional
разрешает отложенное построение, ноboost::shared_ptr
это тоже допускает, так что оба они не нужны, если я вас понимаю. - person Drew Dormann   schedule 12.01.2012shared_ptr
относятся к инициализированному объекту. - person GManNickG   schedule 12.01.2012