Alw*_*ing 4 c++ effective-c++ weak-ptr c++11
有效的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允许我们通过实际删除对象来节省内存吗?"
是.否则,缓存将无限期地保留指向的资源.如果单独分配,控制块所需的空间通常远小于可能需要缓存的资源类型(例如纹理,网格数据,甚至是本地化字符串).
虽然可以使用原子实现相同的功能并检查引用计数为1,但这需要自定义句柄实现.std::weak_ptr并且std::shared_ptr使整个事情太多磨难原型的少.
| 归档时间: |
|
| 查看次数: |
611 次 |
| 最近记录: |