開発環境 | 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パターンを実装するときに使うと便利そうです。
例えば、Subject
のAttach
関数を、void Attach(boost::function<void ()>
にしておくと、
Observer
側は面倒な階層構造を持つ必要がなくなります。
次回に続きます。
投稿者 MASATO : 2008年03月10日 23:29 | トラックバック