gpt4 book ai didi

c++ - 我是否正确理解了 Scott Meyers 的 std::weak_ptr 示例的要点?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:44:01 24 4
gpt4 key购买 nike

Effective Modern C++(第 136 页)使用以下示例来激发 std::weak_ptr。缓存被定义为一个无序的映射,具有指向对象的弱指针作为值。每当此缓存的客户端请求一个对象(通过键)时,就会查找相应的弱指针并在其上调用 lock()。如果生成的 std::shared_ptr 不是 null,则返回它。否则,对象从外部数据库重新加载,进入缓存并返回 std::shared_ptr

现在的问题是:人们可能认为可以在没有 std::weak_ptr 的情况下实现这一点,而是将强共享指针存储为缓存值。如果强指针的use_count()为1,则表示客户端的所有指针都已销毁。这个例子的重点是使用 std::weak_ptr 允许我们通过实际删除对象来节省内存吗?

最佳答案

“这个例子的重点是使用 std::weak_ptr 允许我们通过实际删除对象来节省内存吗?”

是的。否则,缓存将无限期地保留指向的资源分配。如果单独分配,控制 block 所需的空间通常比可能需要缓存的资源类型(例如纹理、网格数据,甚至本地化字符串)少得多。

虽然可以使用原子和检查引用计数 1 来实现相同的功能,但这需要自定义句柄实现。 std::weak_ptrstd::shared_ptr 使整个事情不再是对原型(prototype)的考验。

关于c++ - 我是否正确理解了 Scott Meyers 的 std::weak_ptr 示例的要点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31502996/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com