BREW Smart Object
BrewSmartPtr を使えば、BREW のインターフェースオブジェクトもスマートポインタにすることが出来るようになる。
// BREW のインターフェースオブジェクトを解体するための Deleter class BrewShellDeleter : public BrewRefCountDeleterBase{ public: virtual void Delete( void* p ){ if( p != null ){ IBASE_Release( (IBase*)p ); } } }; int CreateInstance( BrewSmartPtr< IShell > shell , AEECLSID id , BrewRefObject& obj ){ void* p = null; obj = null; int result = ISHELL_CreateInstance( shell.get() , id , &p ); if( result == SUCCESS ){ obj.Set( (IBase*)p , BrewShellDeleter() ); } return result; }
こうすれば、わざわざ *_Release() を行う必要が無くなる。
あとは *_QueryInterface() とかの、内部で *_AddRef() を呼び出すようなやつを wrap してしまえば、ユーザ側で *_Release() を一度も呼び出すことなく、BREW のプログラムを書くことが出来る……ような気がする。試したこと無いから知らない。