2009-05-26 1 views

ответ

8

Boost - weak_ptr имеет некоторые интересные особенности, которые делают его безопасным для использования, если вы также используете shared_ptr. Вы сохраняете ссылку weak_ptr на экземпляр, которым управляет shared_ptr срок службы. Когда вам нужно использовать базовый экземпляр, преобразуйте его в экземпляр shared_ptr, используя конструктор класса shared_ptr или метод lock. Операция завершится неудачно, если базовый экземпляр был удален. Использование является безопасным потоком так же, как и класс shared_ptr:

shared_ptr<int> p(new int(5)); 
weak_ptr<int> q(p); 

// some time later 

if(shared_ptr<int> r = q.lock()) 
{ 
    // use *r 
} 
+0

Спасибо. Я не знал, что у этого слабого_птре было такое поведение. Интересно, сколько я плачу за ненужное поведение подсчета ссылок. В любом случае, ваш ответ был первым, я думаю. Маркировка как можно лучше. –

6

«повышение :: weak_ptr» работает очень хорошо «повышение :: shared_ptr» (также доступен в TR1)