私の初心者の評判のため、このスレッドには返信できません。具体的には、受け入れられた回答です。
boost::intrusive スマート ポインターを使用したことはありませんが、shared_ptr スマート ポインターを使用する場合は、キャッシュに weak_ptr オブジェクトを使用できます。
これらの weak_ptr ポインターは、システムがメモリを解放することを決定したときに参照としてカウントされませんが、オブジェクトがまだ削除されていない限り、shared_ptr を取得するために使用できます。
これは確かに直感的な考えですが、C++ 標準は weak_ptrs の比較をサポートしていないため、連想コンテナーのキーとして使用することはできません。これは、weak_ptrs の比較演算子を実装することで回避できます。
template<class Ty1, class Ty2>
bool operator<(
const weak_ptr<Ty1>& _Left,
const weak_ptr<Ty2>& _Right
);
このソリューションの問題は、
(1) 比較演算子は、比較ごとに所有権を取得する必要があります (つまり、weak_ptr 参照から shared_ptrs を作成します)。
(2) リソースを管理する最後の shared_ptr が破棄されても、weak_ptr はキャッシュから消去されませんが、期限切れの weak_ptr がキャッシュに保持されます。
(2) については、カスタム デストラクタ ( DeleteThread ) を提供できますが、これには、削除する T* から weak_ptr を作成する必要があり、キャッシュから weak_ptr を消去するために使用できます。
私の質問は、スマートポインターを使用したキャッシュへのより良いアプローチがあるかどうかです (私は VC100 コンパイラーを使用していますが、ブーストはありません)、または単にそれを取得できませんか?
乾杯、ダニエル