知识卡片
弱引用通过锁定访问
内容
weak_ptr 观察 shared_ptr 管理的对象而不延长对象寿命;lock 成功才取得临时共享所有权,失败返回空指针。它适合弱缓存、观察者列表及打破拥有关系环;不要先检查存活再假定后续访问仍安全,应把 lock 的结果作为访问依据。
参考来源
- 位置:《Effective Modern C++》第4章《智能指针》,条款二十:当 std::shard_ptr 可能悬空时使用 std::weak_ptr(源文件:_epub-src/EPUB/text/ch005.xhtml)
- 结论依据:原文说明弱引用不参与强引用计数及 lock 的原子获取语义,列举缓存和循环引用场景。
- 原始内容:你需要的是一个原子操作检查 std::weak_ptr 是否已经过期,如果没有过期就访问所指对象。这可以通过从 std::weak_ptr 创建 std::shared_ptr 来实现,具体有两种形式可以从 std::weak_ptr 上创建 std::shared_ptr ,具体用哪种取决于 std::weak_ptr 过期时你希望 std::shared_ptr 表现出什么行为。一种形式是 std::weak_ptr::lock ,…