您的位置:首页 > 其它

内存泄露的小问题(转载)

2007-02-10 13:05 281 查看
转载自:/article/4765928.html

_bstr_t GetMessage(){

_bstr_t msg = "Hello,world!";
return msg.Copy();

}

void MyFunction(){
GetMessage();
}

内存有泄露。。。但是已解决。。。希望对大家有用!
(暂时放首页两天,也算和.NET相关,因为我们是aspx对这个COM+作interop的)

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
前面的写法因调用copy产生了一个未包装的BSTR无人释放,因此有泄漏

后面的写法也不好,_bstr_t::operator wchar_t*() const并不生成新的BSTR串,在msg析构时也会释放自己生成的对象,因此SysFreeString(tmp)纯粹多此一举,不过从表面看SysFreeString两次释放同一个BSTR似乎没有什么副作用,因此这种写法使用应该没什么问题

这样
_bstr_t GetMessage()
{
_bstr_t msg = "Hello,world!";
return static_cast< wchar_t* >(msg);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
第一种写法改成
_bstr_t GetMessage()
{
_bstr_t msg = "Hello,world!";
return msg.copy(false);
}
亦可
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: