mon*_*ksy 5 c++ widestring wstring multibyte
代码段1:
wchar_t *aString()
{
wchar_t *str = new wchar[5];
wcscpy(str, "asdf\0");
return str;
}
wchar_t *value1 = aString();
Run Code Online (Sandbox Code Playgroud)
代码段2
wstring wstr = L"a value";
wchar_t *value = wstr.c_str();
Run Code Online (Sandbox Code Playgroud)
如果未删除代码段2中的值,则不会发生内存泄漏.但是,如果未删除代码段1中的value1,则会发生内存泄漏.wstring :: c_str的内部代码对我来说是一样的.
Mik*_*our 11
一个重要规则:您必须使用delete由其创建的任何内容new,并且您不得删除任何其他内容.
wstr.c_str()返回指向由wstring对象管理的缓冲区的指针.当字符串被销毁时,它将被释放,之后指针将不再有效.使用delete这个是错误的.如果修改字符串,指针也将失效.
aString()返回指向使用创建的缓冲区的指针new[],因此您必须在完成后删除它(使用delete[],匹配new[]).这是容易出错的,这就是为什么它是更好的做法是使用资源管理类(比如string,wstring,容器和智能指针),而不是绕过原始指针,并希望他们正确对待.
| 归档时间: |
|
| 查看次数: |
5668 次 |
| 最近记录: |