2

私はいくつかの COM プログラミングを行っており、コンパイラは gcc です。つまり、CComPtr は利用できません。Boost を使用して置換を簡単に実装するにはどうすればよいですか? 私が必要とするセマンティクスは次のとおりです。

  • AddRefコピー時に呼び出す

  • Release破壊時に呼び出す

  • 追加: オブジェクトが指しているオブジェクトがまだ有効かどうかを判断できる (これが可能かどうかは不明)

カスタムのデリータを使用することは可能かもしれないと思いますが、私はそれらの機能にあまり慣れていません (また、 and をshared_ptr呼び出す方法もわかりません)。このクラスを手作りできることはわかっていますが、この機能が Boost で一般化された形で利用できることは確かです。AddRefRelease

4

2 に答える 2

3

HILO プロジェクトを確認してください。独自の CComPtr 実装が展開されています。

于 2012-06-26T13:18:40.147 に答える
2

AddRef必要な関数とのセマンティクスが何であるかはわかりませんReleaseが、次のとおりです。

参照カウンターを増減するために呼び出されるboost::intrusive_ptr2つの無料関数intrusive_ptr_add_refを使用して持つことができます。これらは、オブジェクトでそれらと関数をintrusive_ptr_release呼び出している可能性があります。カウンターが に達したら、自分で削除する必要があります。AddRefRelease0

于 2012-06-26T14:48:02.003 に答える