3

我们有一些使用 MSXML 的代码,这样做是为了创建 XML 文档对象:

MSXML2::IXMLDOMDocumentPtr  doc_in;

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

一旦我们完成了 doc_in,我们如何销毁它?它只是在 doc_in 超出范围时自动销毁,还是什么?

4

2 回答 2

3

如果IXMLDOMDocumentPtr是一个智能指针(看起来像),那么它将负责为您调用 doc_in.Release()。

于 2011-04-20T01:17:17.777 回答
3

COM 对象生命周期管理建立在通过sIUnknown方法AddRef()Release(). 有关详细信息,请参阅“使用和实现 IUnknown”,尤其是“管理引用计数的规则”

除此之外,还使用了智能指针,最常见的是 ATL CComPtr/CComQIPtr_com_ptr_t.

因此,如果您正在处理指向 COM 实例的普通指针,则必须Release()手动放弃所有权。
如果您有一个指向 COM 实例的智能指针,则Release()应该在智能指针实例超出范围时为您完成 - 但请务必查看您正在使用的实际智能指针类的文档。

于 2011-04-20T04:45:23.803 回答