Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpOpSpLk 137 of 150 menu
◀ ▶

Блокировка weak_ptr через lock в C++

Через weak_ptr нельзя безопасно вызывать методы объекта: он мог уже быть удален.

Метод lock на слабом указателе возвращает shared_ptr, если объект еще жив, или пустой shared_ptr, если владельцев не осталось. Перед использованием проверяют, что полученный указатель не пуст. Запишем класс User:

#include <iostream> #include <memory> #include <string> class User { public: std::string name; User(std::string name) : name(name) {} };

Создадим живой объект и проверим сценарий после reset:

int main() { std::shared_ptr<User> strong = std::make_shared<User>("ann"); std::weak_ptr<User> watch = strong; if (auto alive = watch.lock()) { std::cout << alive->name << "\n"; } strong.reset(); if (auto gone = watch.lock()) { std::cout << gone->name << "\n"; } else { std::cout << "empty\n"; } return 0; }

Сделайте класс Note с полем text. Создайте shared_ptr и weak_ptr, сбросьте сильный указатель, вызовите lock и выведите missing, если вернулся пустой shared_ptr.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить