0

CComPtr<IXmlReader>参照によって関数に aを渡す必要がある状況があります。呼び出されたパラメーターは、呼び出し先パラメーターから所有権を取得しますか (または) 参照カウントが増加しますか?

void foo( CComPtr<IXmlReader> & pReader )
{
  // There is no reassignment of the CComPtr.
  // Just call the IXmlReader methods.
}

CComPtr<IXmlReader> pReader;
foo( pReader );

// Is pReader still valid after the function return ?

ありがとう。

4

2 に答える 2

1

再割り当てがない場合、なぜそれが参照パラメーターなのですか?

とにかく、参照カウントに変更はありません。はい、戻った後も CComPtr は有効です。

于 2012-04-11T11:26:59.157 に答える
0

呼び出し自体の影響を受ける参照カウントはありません。オブジェクトへの参照の数を追加または解放する可能性があるのは、ポインターを使用した内部関数操作のみです。

// 関数が戻った後も pReader は有効ですか?

はい、関数が値を再割り当てしない限り、NULL新しい値を設定するか、そこに入れます。

引数が入力のみの場合でも、この方法で引数を渡すことにはプログラマーのボーナスがあります: (1) スマート ポインターのドメイン内に完全に留まり、適切な参照カウントについてあまり心配する必要はありません (2)たとえば、初期化され->ていないポインター (3) をリリースしようとすると、アサーション エラーが発生する。

于 2012-04-11T19:46:43.277 に答える