noc*_*ura 7 c++ windows string memory-management bstr
通过堆上的wchar_t*分配带有SysAllocString的新BSTR时,我是否应该在堆上释放原始的wchar_t*?
这是正确的方法吗?
wchar_t *hs = new wchar_t[20];
// load some wchar's into hs...
BSTR bs = SysAllocString(hs);
delete[] hs;
Run Code Online (Sandbox Code Playgroud)
我应该在这里调用删除以释放内存吗?或者那个记忆是由BSTR做的?
i_a*_*orf 10
文档中的 SysAllocString()行为如下:
此函数分配一个新字符串并将传递的字符串复制到其中.
所以,是的,一旦你调用了SysAllocString,就可以释放原始的字符数组,因为数据已被复制到新分配的BSTR中.
释放已wchar_t
分配字符串的正确方法new[]
是使用delete[]
.
wchar_t *hs = new wchar_t[20];
...
delete[] hs;
Run Code Online (Sandbox Code Playgroud)
释放a的正确方法BSTR
是使用SysFreeString():
BSTR bs = SysAllocString(hs);
...
SysFreeString(bs);
Run Code Online (Sandbox Code Playgroud)
虽然您是BSTR的新手,但您应该阅读Eric的BSTR语义完全指南.
顾名思义,SysAllocString
分配它的内存,它不会"采用"它的参数的内存.BSTR是以大小为前缀的,并且以 null结尾,因此"采用"c风格的字符串是不可能的,因为大小前缀没有空间.
归档时间: |
|
查看次数: |
6124 次 |
最近记录: |