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;
}

循环多次后,发现内存不断增加;
是否有人研究过这个现象?
请高手指点。
...全文
134 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
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. 如果没注释,还内存不断增长,可能是其他代码原因

64,681

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧