Fel*_*bek 2 c++ memory-management
我正在寻找一种方法来自动释放一个wchar_ts 数组- 有点像autopointer(我真的没有使用std :: auto_ptr,但我认为它不能用于数组).
我现在的代码是这样的:
/* volume is of type wstring,
* hr is of type HRESULT,
* VSS_PWSZ equals wchar_t*
*/
VSS_PWSZ pwszVolume = new wchar_t[volume.size() + 1];
std::copy(volume.begin(), volume.end(), &pwszVolume);
pwszVolume[volume.size()] = 0;
hr = pDiffMgmt->QueryDiffAreasOnVolume(pwszVolume, &pEnumMgmt);
delete[] pwszVolume;
pwszVolume = NULL;
Run Code Online (Sandbox Code Playgroud)
我真的不明白为什么这个愚蠢的功能不能采取const wchar_t*,否则我可以通过volume.c_str().
到目前为止这么好,我认为我的代码解决了这个问题,但现在内存管理变得越来越复杂了:我必须复制delete[]代码来解决可能抛出的异常(我不想在这一点上抓住它) .)
有没有办法pwszVolume在剩下当前范围时自动解除分配?
使用std :: vector <wchar_t>它是你的基本C++数组(或std :: wstring,如果你想像字符串一样操纵它).
std::vector<wchar_t> pwszVolume(volume.begin(), volume.end());
pwszVolume.push_back(0);
hr = pDiffMgmt->QueryDiffAreasOnVolume(&pwszVolume[0], &pEnumMgmt);
Run Code Online (Sandbox Code Playgroud)
问题可能是.QueryDiffAreasOnVolume()对数据做了什么?
也许你不需要复制它.
| 归档时间: |
|
| 查看次数: |
939 次 |
| 最近记录: |