【发布时间】:2011-03-11 15:22:44
【问题描述】:
在 C++ 中,我使用 boost::shared_ptr 和 boost::weak_ptr 自动删除不再需要的对象。我知道这些与引用计数有关。
在 Java 中,内存由垃圾收集器管理,垃圾收集器将内置对象引用视为 strong,WeakReference 视为 weak,SoftReference 视为某事介于两者之间(可能由 GC 收集,但也可能在 GC 中幸存下来),这对于缓存一段时间的对象非常方便,但一旦可用内存变少就将其丢弃。
所以现在我又回到了 C++ 中,我想念软引用带来的舒适感。我想知道软引用是否完全适用于引用计数。当对一个对象的最后一个strong引用被清除,并且还有一个soft引用,它到底什么时候会被删除呢?我可以想到一些方案,但在我看来它们都不聪明。
以防万一软引用和引用计数有适当的语义,我想知道这是否已经实现,甚至可能与boost::shared_ptr(或C++ TR1等效std::shared_ptr兼容) )。
如果这两个问题的答案都是否定的,那么在对象缓存场景中有哪些替代方案?
编辑: 当然,我说的是缓存实际上很有用的情况,因为对象的构造成本很高(想想对数据库的多次访问和网络查询),但有太多需要永远保留它们。
【问题讨论】:
-
在家中的软参考到底是什么?
-
我也不明白——它一定是某种参考。
-
“当它在家里”是一个短语,意思是......呃......真的不多。 “当它在家里时,到底什么是软参考?”意思是“什么(到底)是软参考?”
-
@JUST:如果你是在回复我的评论,那是个玩笑,虽然很弱。
-
@Amnon:是软的,不是软的。
标签: c++ memory-management boost shared-ptr soft-references