РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
650 of 815 menu

Метод lock

Метод lock класса weak_ptr пытается получить временный shared_ptr на объект, за которым наблюдает weak_ptr. Если объект еще жив (то есть на него ссылается хотя бы один shared_ptr), метод возвращает shared_ptr, владеющий этим объектом, и счетчик ссылок увеличивается на 1. Если же объект уже был удален, метод возвращает пустой shared_ptr, который при приведении к bool дает false. Метод не принимает параметров и является потокобезопасным.

Синтаксис

weak_ptr<T>::lock()

Пример

Давайте создадим shared_ptr, затем weak_ptr из него и попробуем получить владеющий указатель через lock, пока объект еще существует:

#include <iostream> #include <memory> using namespace std; int main() { shared_ptr<int> sp = make_shared<int>(42); weak_ptr<int> wp = sp; shared_ptr<int> res = wp.lock(); if (res) { cout << *res << endl; } else { cout << "object is gone" << endl; } return 0; }

Результат выполнения кода:

42

Пример

Теперь давайте сбросим все владеющие указатели и посмотрим, что вернет lock после уничтожения объекта:

#include <iostream> #include <memory> using namespace std; int main() { shared_ptr<int> sp = make_shared<int>(42); weak_ptr<int> wp = sp; sp.reset(); shared_ptr<int> res = wp.lock(); if (res) { cout << *res << endl; } else { cout << "object is gone" << endl; } return 0; }

Результат выполнения кода:

"object is gone"

Смотрите также

  • класс weak_ptr,
    который хранит слабую ссылку на объект
  • метод expired,
    который проверяет, был ли объект уже удален
  • класс shared_ptr,
    который управляет временем жизни объекта
  • метод lock,
    который безопасно получает доступ к объекту
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить