私は単にこれを行うクラスをしたい:ブーストには一般的な「クリーンアップ」クラスがありますか?
class cleanup : boost::noncopyable
{
public:
typedef boost::function0<void> function;
explicit cleanup(function f) : func(f)
{
}
~cleanup()
{
func();
}
private:
function func;
};
目的は、私はそれが削除されたときにFUNCを呼び出すために、この「クリーンアップ」を持っているということで。クリーンアップはshared_ptrとして渡されます。
私はboost :: shared_ptrのカスタムディテクタを使ってやっていることも考えました。たぶん私はboost :: shared_ptrを使用し、NULLで作成してfunc()を取得して無視するパラメータを取ることができます。
この目的は、最後の参照が範囲外になったときにクラスのデストラクタが実行するステップを抽象化することです(実際には、クラスがコンテナについて知らなくてもそれを保持するコンテナから自分自身を削除します) 。
私はshared_ptrのでそれを行う場合、私はおそらく周りにこれらのいずれかを渡します
ここboost::shared_ptr<void> cleanupObj(NULL, func);
funcがパラメータを取る必要があります。ポインタがNULLの場合、Deleterが常に呼び出されるということは100%確信しているわけではありません。おそらく、別のポインタを使用する必要があります。
これを処理する標準的な方法はありますか?そうでない場合は、何が最善の方法ですか。
正確に何が必要ですか? 'func()'が既存のオブジェクトのデストラクタを使って行うことができないことの例を挙げてください。 –
私はもともと私が望むことをやるためにクラスを作成し、それを抽出して、boost :: functionでラップして私がプライベートなものをプライベートにすることを可能にし、すべてです。 func()を保持するアイテムは、コンテナ内のアイテムであり、そのコンテナに依存してはいけません。アイテムがもはや必要でなくなると、テーブルから削除されます。テーブル自体はweak_ptrを参照として格納します。 – CashCow
あなたの説明からは、それほど良い考えではないかもしれない何かをしようとしているように思えます。たぶんあなたが問題を分かち合うと、より良い答えとそれを解決する良い方法が得られるでしょう。 @Daniel Lidstrom。 –