_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);
}
亦可