社区
ATL
帖子详情
内存泄露的问题
navyl
2010-01-22 09:40:07
我在做一个控件,但我对用ATL开发ActiveX不熟悉。
我想知道如果在ActiveX中有一个属性,BSTR类型的,假设有一个“学号”的属性,对应的变量
BSTR m_no
我这样用:
m_no = _com_util::ConvertStringToBSTR("00000001");
我需要显式释放m_no吗
如果是VARIANT m_no,我需要显式释放m_no吗
...全文
129
17
打赏
收藏
内存泄露的问题
我在做一个控件,但我对用ATL开发ActiveX不熟悉。 我想知道如果在ActiveX中有一个属性,BSTR类型的,假设有一个“学号”的属性,对应的变量 BSTR m_no 我这样用: m_no = _com_util::ConvertStringToBSTR("00000001"); 我需要显式释放m_no吗 如果是VARIANT m_no,我需要显式释放m_no吗
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
marrco2005
2010-01-22
打赏
举报
回复
[Quote=引用 14 楼 navyl 的回复:]
引用 13 楼 wizardk 的回复:
都需要你自己调用SysFreeString去释放,否则你调用ConvertStringToBSTR而连带造成触发SysAllocString,从栈中开辟出的空间,谁给你释放?
我也是这样想,但是如果是第二种情况,即
VARIANT m_no;
这样的要怎样释放
[/Quote]
VARIANT 用 VariantClear( ) 函数清楚
VariantClear 会根据 VARIANT 的类型自动调用相应的资源释放函数
下面是MSDN的说明
If the vt member is VT_BSTR, the string is freed.
If the vt member is VT_DISPATCH, the object is released.
If the vt member has the VT_ARRAY bit set, the array is freed.
navyl
2010-01-22
打赏
举报
回复
是不是这个问题太幼稚园了,大侠们都不屑回答。
navyl
2010-01-22
打赏
举报
回复
[Quote=引用 13 楼 wizardk 的回复:]
都需要你自己调用SysFreeString去释放,否则你调用ConvertStringToBSTR而连带造成触发SysAllocString,从栈中开辟出的空间,谁给你释放?
[/Quote]
我也是这样想,但是如果是第二种情况,即
VARIANT m_no;
这样的要怎样释放
WizardK
2010-01-22
打赏
举报
回复
[Quote=引用 11 楼 navyl 的回复:]
引用 9 楼 wizardk 的回复:
如果放入了COleVariant就不需要释放,因为其析构会帮你处理。
如果仅仅是ConvertStringToBSTR了,就需要自己最后去SysFreeString。
不好意思,可能是我没有说清楚,我的意思是
1、BSTR m_no
2、VARIANT m_no
[/Quote]
都需要你自己调用SysFreeString去释放,否则你调用ConvertStringToBSTR而连带造成触发SysAllocString,从栈中开辟出的空间,谁给你释放?
navyl
2010-01-22
打赏
举报
回复
1、BSTR m_no
m_no = _com_util::ConvertStringToBSTR("00000001");
2、VARIANT m_no
m_no.vt = VT_BSTR;
m_no.bstrVal = _com_util::ConvertStringToBSTR("00000001");
navyl
2010-01-22
打赏
举报
回复
[Quote=引用 9 楼 wizardk 的回复:]
如果放入了COleVariant就不需要释放,因为其析构会帮你处理。
如果仅仅是ConvertStringToBSTR了,就需要自己最后去SysFreeString。
[/Quote]
不好意思,可能是我没有说清楚,我的意思是
1、BSTR m_no
2、VARIANT m_no
tiancai76
2010-01-22
打赏
举报
回复
不需要啊,用boundersCheck检测一下就知道有没有内存泄露了~~
[Quote=引用楼主 navyl 的回复:]
我在做一个控件,但我对用ATL开发ActiveX不熟悉。
我想知道如果在ActiveX中有一个属性,BSTR类型的,假设有一个“学号”的属性,对应的变量
BSTR m_no
我这样用:
m_no = _com_util::ConvertStringToBSTR("00000001");
我需要显式释放m_no吗
如果是VARIANT m_no,我需要显式释放m_no吗
[/Quote]
WizardK
2010-01-22
打赏
举报
回复
如果放入了COleVariant就不需要释放,因为其析构会帮你处理。
如果仅仅是ConvertStringToBSTR了,就需要自己最后去SysFreeString。
joimson
2010-01-22
打赏
举报
回复
它是一个指针
最好释放一下
navyl
2010-01-22
打赏
举报
回复
我跟踪了一下,执行了::SysFreeString(m_no);这条语句。
~Student
{
if(m_no)
::SysFreeString(m_no);
}
快乐鹦鹉
2010-01-22
打赏
举报
回复
是new产生的么?一般不需要吧。
北京的雾霾天
2010-01-22
打赏
举报
回复
一般需要使用SysFreeString来释放,但这样看情况。
bragi523
2010-01-22
打赏
举报
回复
[Quote=引用 1 楼 miaolingshaohua 的回复:]
不用
[/Quote]up
navyl
2010-01-22
打赏
举报
回复
不会内存泄露吗?
这两种类型又不是自管理的。
ccpaishi
2010-01-22
打赏
举报
回复
不需要的
哈利路亚1874
2010-01-22
打赏
举报
回复
不用
WizardK
2010-01-22
打赏
举报
回复
[Quote=引用 14 楼 navyl 的回复:]
引用 13 楼 wizardk 的回复:
都需要你自己调用SysFreeString去释放,否则你调用ConvertStringToBSTR而连带造成触发SysAllocString,从栈中开辟出的空间,谁给你释放?
我也是这样想,但是如果是第二种情况,即
VARIANT m_no;
这样的要怎样释放
[/Quote]
这要看你的应用情况,你都知道VARIANT里面放的是BSTR了,那么就直接释放m_no.bstrVal,或者调用楼上所说的VariantClear()去释放。
详解QT
内存泄露
问题
有可能出现
内存泄露
的
问题
列举 及解决方法
Linux
内存泄露
查找
linux
内存泄露
排查文档。 介绍mtrace的使用。根据实际
问题
介绍如果定位
问题
。
Android内存泄漏案例分析
Android内存泄漏案例分析视频教程,该课程结合一个真实案例,来演示Android
内存泄露
问题
,从发现到分析定位,再到最终解决的全过程。一款优秀的Android应用,不仅要有完善的功能,也要有良好的体验,而性能是影响...
QT Creator
内存泄露
检测VLD
windows下Qt creator 使用 VLD 工具的方法,下载 安装 使用 用浏览器打开
内存泄露
Demo leaky app
内存泄露
Demo leaky app
ATL
3,245
社区成员
48,539
社区内容
发帖
与我相关
我的任务
ATL
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
复制链接
扫一扫
分享
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章