3

MSXML を使用するコードがいくつかあり、これを実行して XML ドキュメント オブジェクトを作成します。

MSXML2::IXMLDOMDocumentPtr  doc_in;

doc_in.CreateInstance("Msxml2.DOMDocument.6.0");

doc_in の処理が終わったら、どのように破棄するのでしょうか? doc_in が範囲外になったときに自動的に破棄されるだけですか?それとも何ですか?

4

2 に答える 2

3

COM オブジェクトの有効期間管理は、とのメソッドによる参照カウントに基づいています。詳細については、 「IUnknown の使用と実装」、特に「参照カウントを管理するためのルール」を参照してください。IUnknownAddRef()Release()

その上で、スマート ポインターが使用されます。最も一般的なのは ATL のCComPtr/CComQIPtr_com_ptr_t.

そのため、COM インスタンスへの単純なポインターを扱っている場合は、Release()手動で所有権を放棄する必要があります。
COM インスタンスへのスマート ポインターがあるRelease()場合は、スマート ポインター インスタンスがスコープ外になったときにこれを行う必要がありますが、使用している実際のスマート ポインター クラスのドキュメントを確認してください。

于 2011-04-20T04:45:23.803 に答える
3

IXMLDOMDocumentPtrがスマート ポインターである場合(そのように見えます)、doc_in.Release() の呼び出しを処理します。

于 2011-04-20T01:17:17.777 に答える