C++ADO智能指针内存是否会泄漏

xy2163com 2014-01-10 04:20:20
例如在一个循环中测试使用_ConnectionPtr智能指针,声明对象并创建
_ConnectionPtr pConnect;
HRESULT hr = pConnect.CreateInstance(_uuidof(Connection));
if (!SUCCEEDED(hr) || pConnect == NULL)
{
return ;
}
然后释放
if (pConnect != NULL)
{
if (pConnect->State & adStateOpen) //因为没有Open(),所以没有进入
{
pConnect->Close();
}
pConnect.Release(); //此处可注释
pConnect = NULL;
}

循环多次后,发现内存不断增加;
是否有人研究过这个现象?
请高手指点。
...全文
69 点赞 收藏 5
写回复
5 条回复
xy2163com 2014年01月10日
引用 1 楼 buyong 的回复:
1. 你说的“pConnect.Release(); //此处可注释”, 我认为绝对不能注释,这就像new/delete一样,不delete 就内存泄漏。 2. 如果没注释,还内存不断增长,可能是其他代码原因
只有这一段测试代码,注释这段代码内存就不会增加; 例如改为int i=0;或Cstring str = _T("123");
回复 点赞
derekrose 2014年01月10日
智能指针还需要手动释放??
回复 点赞
xy2163com 2014年01月10日
会 我试过以下的 1、两句都注释 pConnect.Release(); //此处可注释 pConnect = NULL; 2、只注释其中一句 3、都不注释 以上情况在进程管理那里都可以看到内存增加;而把上面的整块代码块注释,就没有内存增加的现象
回复 点赞
蜥蜴枪王 2014年01月10日
智能指针应该不会内存泄露,不注释那个Release也会么?
回复 点赞
buyong 2014年01月10日
1. 你说的“pConnect.Release(); //此处可注释”, 我认为绝对不能注释,这就像new/delete一样,不delete 就内存泄漏。 2. 如果没注释,还内存不断增长,可能是其他代码原因
回复 点赞
发动态
发帖子
C++ 语言
创建于2007-09-28

3.1w+

社区成员

24.8w+

社区内容

C++ 语言相关问题讨论,技术干货分享
社区公告
暂无公告