【发布时间】:2011-03-18 07:49:14
【问题描述】:
我有一个成员变量声明为
CComPtr<IXMLDOMDocument2> m_spXMLDoc;
XML 文档是这样创建的
CoCreateInstance(CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER,
IID_IXMLDOMDocument2, (void**)&m_spXMLDoc));
现在,当应用程序退出时,会引发异常。调用栈指向p->Release()
~CComPtrBase() throw()
{
if (p)
p->Release();
}
当我在 VS 调试器中将鼠标悬停在 p 上时,它指向了一些有效内存。
最后一个调用栈指向msxm6中的异常
msxml6.dll!3d6cXX03()
任何建议,可能是什么原因?我认为这不是CComPtr 问题。
【问题讨论】:
-
手动发布()或滥用其他 CComPtrs(例如通过
Attach())可能是一个原因。如果其他一切看起来都很好,那么也可能是其他问题导致内存损坏。 -
对象的生命周期是多少?什么时候调用析构函数?
-
你找到原因了吗?我刚刚遇到了类似的问题(除了我使用的是调试接口访问 SDK COM 类,但可能不关心使用的确切 com 类)。我怀疑这与 CComPtr 实现错误或其他有关。
标签: exception visual-c++ com atl smart-pointers