是否有“CreateInstance”的对应项?
我们有一些使用 MSXML 的代码,它是用来创建 XML 文档对象的:
MSXML2::IXMLDOMDocumentPtr doc_in;
doc_in.CreateInstance("Msxml2.DOMDocument.6.0");
一旦我们完成了 doc_in,我们如何销毁它?当 doc_in 超出范围时它会自动销毁吗?还是什么?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
COM 对象生命周期管理通过 引用计数之上.com/en-us/library/ms680509%28v=VS.85%29.aspx" rel="nofollow">
IUnknown
方法AddRef()
和Release()
。有关详细信息,请参阅“使用和实现 IUnknown” “,特别是“管理引用计数的规则”。除了使用智能指针之外,最常见的 ATL
CComPtr
/CComQIPtr
和_com_ptr_t
。因此,如果您正在处理指向 COM 实例的普通指针,则必须手动
Release()
来放弃所有权。如果您有一个指向 COM 实例的智能指针,那么当智能指针实例超出范围时,
Release()
应该为您完成 - 但请确保查看实际的文档您正在使用的智能指针类。COM object lifetime management builds on reference counting via
IUnknown
s methodsAddRef()
andRelease()
. For details see "Using and Implementing IUnknown", in particular "Rules for Managing Reference Counts".On top of that smart pointers are used, most commonly ATLs
CComPtr
/CComQIPtr
and_com_ptr_t
.So, if you're dealing with a plain pointer to a COM instance, you have to
Release()
manually to relinquish ownership.If you have a smart pointer to a COM instance, the
Release()
should be done for you when the smart pointer instance goes out of scope - but to be sure take a look at the documentation for the actual smart pointer class you are using.如果 IXMLDOMDocumentPtr 是一个智能指针(就像它看起来的那样),那么它将负责为您调用 doc_in.Release() 。
If IXMLDOMDocumentPtr is a smart pointer (as it looks like) then it will take care of calling doc_in.Release() for you.