Если вы берете блокировку на std::weak_ptr
:
class foo {};
auto s = std::make_shared<foo>();
std::weak_ptr<foo> w{ s };
s = nullptr;
s.reset(new foo());
auto l = w.lock(); // try to get previous foo
std::cout << "locked: " << (l != nullptr) << std::endl;
Вывод:
locked: 0
Как только блокировка возвращается nullptr
, существует ли условие, при котором она может вернутьсяне нулевой, или он фактически мертв?
Моя тестовая программа предлагает, когда счетчик ссылок первоначально выделенного объекта равен нулю, а затем нет, weak_ptr
всегда будет возвращать nullptr.