И boost::weak_ptr
, и boost::shared_ptr
похожи, если речь идет о безопасности потоков: они не являются потокобезопасными, если есть риск, что объект где-нибудь будет уничтожен. Если ваш объект, на который есть ссылка в boost::shared_ptr
, или когда на слабый_приемник ссылаются постоянно, то использование может использовать shared/weak
ptrs без какого-либо риска.
Но если какая-то операция разыменовывает последний живой экземпляр объекта, тогда вы не можете выполнять некоторые операции над weak_ptr
: в частности: вы не можете присвоить weak_ptr
другой weak_ptr
, потому что она использует shared_ptr
внутренне. Кроме того, вы не можете использовать блокировку, потому что результат не определен. Кроме того, метод expired()
бесполезен: он может возвращать true, но затем на следующей строке вашего кода ваш объект может быть уже просрочен.