Есть ли умный указатель, который автоматически обнуляется, когда его цель уничтожается в 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)

Другие вопросы по тегам