C++ では、不要になったオブジェクトを自動的に削除するためにboost::shared_ptr
andを使用しています。boost::weak_ptr
これらは参照カウントで機能することを知っています。
Java では、メモリはガベージ コレクターによって管理されます。ガベージ コレクターは、組み込みのオブジェクト参照を strong 、 weak 、およびその中間のものと見なします( GCによって収集される可能性がありますが、GC を生き残ることもできます)。これは非常に便利です。しばらくの間オブジェクトをキャッシュしますが、空きメモリが少なくなるとすぐにオブジェクトを破棄します。WeakReference
SoftReference
だから今、私は C++ に戻っており、ソフト参照を持つ快適さが恋しいです。参照カウントでソフト参照が実際に実行可能かどうか疑問に思います。オブジェクトへの最後の強参照がクリアされ、ソフト参照が残っている場合、それはいつ削除されるのでしょうか? いくつかの計画を思いつくことができましたが、どれも賢いとは思えません。
参照カウントに加えてソフト参照の適切なセマンティクスがある場合に備えて、これは既に実装されているのではないかと思います。おそらく互換性のある方法でboost::shared_ptr
(または C++ TR1 に相当std::shared_ptr
します)。
両方の質問に対する答えが「いいえ」の場合、オブジェクト キャッシング シナリオの代替手段は何ですか?
編集: もちろん、オブジェクトを構築するのにコストがかかるため(データベースへの複数のアクセスとネットワークのクエリを考えてください)、キャッシングが実際に役立つ状況について話していますが、それらをすべて永久に保持するには多すぎます。