Effective Modern C++(第 136 页)使用以下示例来激励std::weak_ptr
. 缓存被定义为一个无序映射,其中指向对象的弱指针作为值。每当这个缓存的客户端请求一个对象(按键)时,相应的弱指针就会被查找并lock()
在其上调用。如果结果std::shared_ptr
不是null
,则返回。否则,对象将从外部数据库重新加载,输入缓存并std::shared_ptr
返回给它。
现在的问题是:有人可能认为可以在没有 的情况下实现这一点std::weak_ptr
,而是将强共享指针存储为缓存值。如果use_count()
一个强指针的值等于1,那意味着所有客户端的指针都被销毁了。这个例子的重点是使用std::weak_ptr
允许我们通过实际删除对象来节省内存吗?