MSXML を使用するコードがいくつかあり、これを実行して XML ドキュメント オブジェクトを作成します。
MSXML2::IXMLDOMDocumentPtr doc_in;
doc_in.CreateInstance("Msxml2.DOMDocument.6.0");
doc_in の処理が終わったら、どのように破棄するのでしょうか? doc_in が範囲外になったときに自動的に破棄されるだけですか?それとも何ですか?
MSXML を使用するコードがいくつかあり、これを実行して XML ドキュメント オブジェクトを作成します。
MSXML2::IXMLDOMDocumentPtr doc_in;
doc_in.CreateInstance("Msxml2.DOMDocument.6.0");
doc_in の処理が終わったら、どのように破棄するのでしょうか? doc_in が範囲外になったときに自動的に破棄されるだけですか?それとも何ですか?
COM オブジェクトの有効期間管理は、とのメソッドによる参照カウントに基づいています。詳細については、 「IUnknown の使用と実装」、特に「参照カウントを管理するためのルール」を参照してください。IUnknown
AddRef()
Release()
その上で、スマート ポインターが使用されます。最も一般的なのは ATL のCComPtr
/CComQIPtr
と_com_ptr_t
.
そのため、COM インスタンスへの単純なポインターを扱っている場合は、Release()
手動で所有権を放棄する必要があります。
COM インスタンスへのスマート ポインターがあるRelease()
場合は、スマート ポインター インスタンスがスコープ外になったときにこれを行う必要がありますが、使用している実際のスマート ポインター クラスのドキュメントを確認してください。
IXMLDOMDocumentPtrがスマート ポインターである場合(そのように見えます)、doc_in.Release() の呼び出しを処理します。