2008年03月10日

boost::function その2

開発環境Visual C++ 2008

前回の続きです。
前回FuncオブジェクトにObjectそのものを渡していましたが、今回はポインタを渡してみました。

void Test2B(void)
{
  boost::function<void ()> Func;
  {
    TestClass Object;
    Func = boost::bind(&TestClass::Test, &Object);
  }
  Func();
}

Objectのスコープ外でFunc()を実行してみました。
実行結果は以下の通り。

Constructed this=0012FE5B
Destructed this=0012FE5B
Func this=0012FE5B

デストラクタの後にメンバ関数Testが呼び出されているようです。これは問題ありそうです。 やっぱりスコープ外で実行してはいけなかったようです。 しかし、スコープ内で実行する場合であれば、前回のように大量のコピーが発生しない分、今回の方が良いでしょう。

GoFのObserverパターンを実装するときに使うと便利そうです。
例えば、SubjectAttach関数を、void Attach(boost::function<void ()>にしておくと、 Observer側は面倒な階層構造を持つ必要がなくなります。

次回に続きます。

投稿者 MASATO : 2008年03月10日 23:29 | トラックバック
コメント
コメントする









名前、アドレスを登録しますか?