shared_ptrのユーザーがいつ完了したか、つまりユーザーが最終的にすべてのコピーをリリースしたときを知る必要がある状況があります。通常、ここではデリターを使用していますが、この場合は小さなキャッチがあります。基礎となるオブジェクトはすでにshared_ptrです!
すなわち、擬似コードでは:
shared_ptr a( new T );
.
.
.
shared_ptr b( a, bind( delete_func, id ) );
私は元のshared_ptrから新しいブランチを作り出しています。この新しいshared_ptr b
は通常のshared_ptrのようにコピーして使用できますが、この特定の分岐が完了したときにdelete_funcを呼び出す必要があります。今度は、この新しいshared_ptrに基底のオブジェクトも保持する必要があるので(これは最後のshared_ptrかもしれません)、ここで a.get()
を使用することはできません。
私は大幅にフレームワークを変更することなくこれを行うためのいくつかの方法を探しています。誰かが良いシンプルなソリューションを見ていますか?
スマートポインタとバインド用のブーストライブラリを使用しています。