「this」ポインターをスマートポインターと組み合わせて使用しないようにするにはどうすればよいですか?これを回避するためのデザインパターン/一般的な提案はありますか?
次のいずれかなので、2つを組み合わせるのはノーノーだと思います。
- そもそもスマートポインターを使用するという点を打ち負かす、スマートポインター管理オブジェクトへのネイティブポインターを渡しているのです。
- 「this」ポインターを使用時にスマートポインターでラップすると、たとえば「return CSmartPtr(this);」のように、同じオブジェクトを管理する複数のスマートポインターが効果的に設定されるため、最初のポインターの参照カウントはゼロになります。他の下からオブジェクトを破壊する、または
- これらの場合に返すCSmartPtr(this)の値を保持するメンバー変数がある場合、最終的には循環参照になり、参照カウントは常に1になります。
少しコンテキストを与えるために、私は最近、STLコンテナーをオブジェクトと組み合わせる場合の悪影響(浅いコピーの繰り返し、基本クラスのコンテナーを使用する場合のスライスなど)について学びました。そのため、コードでのこれらの使用法の一部を次のように置き換えます。オブジェクトへのスマートポインタ。いくつかのオブジェクトは、「this」ポインタを使用して自分自身への参照を渡します。これは私が立ち往生している場所です。
スマートポインタ+「これ」は有害だと考えられていますか?やや似たような問題について尋ねましたが、私はBoostを使用していないので、答えは役に立ちません。
編集:私がやっていたことの(非常に工夫された)例は次のようになります
...::AddToProcessingList(vector<CSmartPtr> &vecPtrs)
{
vecPtrs.push_back(CSmartPtr(this));
}