我们有一些使用MSXML的代码,并且这样做是为了创建XML文档对象:
MSXML2::IXMLDOMDocumentPtr doc_in;
doc_in.CreateInstance("Msxml2.DOMDocument.6.0");
一旦我们完成doc_in,我们如何销毁它?它只是在doc_in超出范围时自动销毁,还是什么?
答案 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()
- 但是要确保查看实际智能指针类的文档。使用