我正在寻找一种自动释放 wchar_t
数组的方法——有点像自动指针(我不太熟悉 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;
我真的不明白为什么这个愚蠢的函数不能接受 const wchar_t*
,否则我可以传递 volume.c_str()
。
到目前为止一切顺利,我认为我的代码解决了这个问题,但现在内存管理变得越来越复杂:我将不得不复制 delete[]
代码来解决可能出现的异常抛出(此时我不想捕获它。)
有没有办法让 pwszVolume
在离开当前作用域时自动释放?
最佳答案
使用 std::vector
std::vector<wchar_t> pwszVolume(volume.begin(), volume.end());
pwszVolume.push_back(0);
hr = pDiffMgmt->QueryDiffAreasOnVolume(&pwszVolume[0], &pEnumMgmt);
问题可能是。 QueryDiffAreasOnVolume() 对数据做了什么?
也许你不需要复制出来。
关于c++ - 自动释放数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6831647/