私はboost:shared_ptr
自分のコードで広範囲に使用しています。実際、ヒープに割り当てられているオブジェクトのほとんどは、によって保持されていshared_ptr
ます。this
残念ながら、これは、をとる関数に渡すことができないことを意味しshared_ptr
ます。このコードを考えてみましょう:
void bar(boost::shared_ptr<Foo> pFoo)
{
...
}
void Foo::someFunction()
{
bar(this);
}
ここには2つの問題があります。shared_ptr
まず、のT *コンストラクターが明示的であるため、これはコンパイルされません。次に、それを強制的にビルドするとbar(boost::shared_ptr<Foo>(this))
、オブジェクトへの2番目の共有ポインターが作成され、最終的には二重削除になります。
これは私の質問に私をもたらします:あなたが知っている既存の共有ポインタのコピーをそれらのオブジェクトの1つのメソッドの内部から取得するための標準的なパターンはありますか?ここでの唯一のオプションは、侵入参照カウントを使用していますか?