Есть ли умный указатель, который автоматически обнуляется, когда его цель уничтожается в C++
Я нашел QPointer. Есть ли другие?
2 ответа
Решение
Boost - the 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
}
"boost::weak_ptr" действительно хорошо работает с "boost::shared_ptr" (также доступен в tr1)