是否有“CreateInstance”的对应项?

发布于 2024-11-02 11:11:03 字数 213 浏览 1 评论 0 原文

我们有一些使用 MSXML 的代码,它是用来创建 XML 文档对象的:

MSXML2::IXMLDOMDocumentPtr  doc_in;

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

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

We have some code that uses MSXML, and does this to create the XML document object:

MSXML2::IXMLDOMDocumentPtr  doc_in;

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

Once we're finished with doc_in, how do we destroy it? Is it just automatically destructed when doc_in goes out of scope, or what?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

末蓝 2024-11-09 11:11:03

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 IUnknowns methods AddRef() and Release(). 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.

幼儿园老大 2024-11-09 11:11:03

如果 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文