Есть ли умный указатель, который автоматически обнуляется, когда его цель уничтожается в C ++ - PullRequest
4 голосов
/ 26 мая 2009

Я нашел QPointer . Есть ли другие?

Ответы [ 2 ]

8 голосов
/ 26 мая 2009

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
}
6 голосов
/ 26 мая 2009

«boost :: weak_ptr» действительно хорошо работает с «boost :: shared_ptr» (также доступно в tr1)

...