Существует ли умный указатель, который автоматически обнуляется при уничтожении его цели в C++?
-
05-09-2019 - |
Вопрос
Я нашел QPointer.Есть ли другие?
Решение
Способствовать росту - 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)
Не связан с StackOverflow