在 C++ 中,我使用boost::shared_ptr
andboost::weak_ptr
来自动删除不再需要的对象。我知道这些与引用计数有关。
在 Java 中,内存由垃圾收集器管理,它认为内置的对象引用是强、弱和介于两者之间的(可能被 GC 收集,但也可能在 GC 中幸存下来),这真的很方便用于缓存对象一段时间,但在可用内存变低时将其丢弃。WeakReference
SoftReference
所以现在我回到了 C++,我想念软引用带来的舒适感。我想知道软引用是否完全适用于引用计数。当对一个对象的最后一个强引用被清除,并且还有一个软引用时,它到底什么时候会被删除呢?我可以想出一些方案,但在我看来它们都不聪明。
以防万一软引用和引用计数有适当的语义,我想知道这是否已经实现,也许以一种甚至兼容的方式boost::shared_ptr
(或与此相关的 C++ TR1 等效项std::shared_ptr
)。
如果这两个问题的答案都是否定的,那么在对象缓存场景中还有哪些替代方案?
编辑: 当然,我说的是缓存实际上很有用的情况,因为对象的构建成本很高(考虑对数据库的多次访问和网络查询),但有太多无法永久保存它们。