自动解除分配数组?

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在剩下当前范围时自动解除分配?

Mar*_*ork 6

使用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()对数据做了什么?
也许你不需要复制它.

  • 你可以直接从一个范围构造一个`vector`,不需要`std :: copy`.使用`std :: vector <wchar_t> pwszVolume(volume.begin(),volume.end()); pwszVolume.push_back(0);`. (4认同)