是否有“CreateInstance”的对应物?

时间:2011-04-19 17:49:15

标签: com msxml destruction

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

MSXML2::IXMLDOMDocumentPtr  doc_in;

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

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

2 个答案:

答案 0 :(得分:3)

如果 IXMLDOMDocumentPtr 是智能指针(如图所示),那么它将负责为您调用doc_in.Release()。

答案 1 :(得分:3)

COM对象生存期管理通过reference counting方法AddRef()Release()构建在IUnknown上。有关详情,请参阅 "Using and Implementing IUnknown" ,特别是 "Rules for Managing Reference Counts"

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

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