私はいくつかの共有ポインタを持っていますshared_ptr<T> pointer1(new T(1));
。
ここで、コードの他の部分に明示的なコピーがあります(または他のコンテナーpointer2
に格納されると思います)。std::map
のようにコピーが行われたとしましょうmap.insert(make_pair(key1, pointer1));
。
私はその 2 番目のコピーを一部のデータをプリキャッシュするためだけに使用しています。これは、メイン ポインターが既に無効である場合、2 番目のポインターを格納する必要がないことを意味します。この場合、どうすればよいですか?
pointer1
コードの他の部分で無効になったことがわかっている場合、2 番目のポインターのメモリ割り当てを強制的に解除する方法はありますか?
または、醜い方法を取る必要があります-時々、マップにptr.unique()
設定されているポインターをチェックして、true
それらを破壊しますか?
多分いくつかの代替案/アドバイスはありますか?
編集 - プレーンコードサンプル
std::map<int, shared_ptr<int> > map;
{
shared_ptr<int> pointer1(new int(5));
map.insert(std::make_pair(0, pointer1));
}
<0, shared_ptr[NULL]>
これらの操作が発生した後ではなく、マップを含むようにする方法/トリックはあります<0, shared_ptr[5]>
か?
ありがとう