Блокировка 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.