c++ - 自动释放数组?

标签 c++ memory-management

我正在寻找一种自动释放 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 它是你的基本 C++ 数组(或者 std::wstring 如果你想像字符串一样操作它)。

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/

相关文章:

c# - 如何管理 C 和 C# 之间的缓冲区

c++ - C++错误: expected constructor, destructor, or type conversion before ‘(’ token

c++ - 如何像普通 C 函数一样使用正确的 'this' 指针调用 C++ 类成员函数? (指向类成员函数的指针)

c++ - 如何用范围内的随机值填充数组? (重复是可以的。)

objective-c - 返回 Objective-C 对象时的内存管理

java - ArrayList 对象创建时的默认内存分配

c++ - QTextStream格式问题

c++ - 从 cuda 3D 内存复制到线性内存 : copied data is not where I expected

c++ - 哈希表/双向链表中的内存泄漏

c - 如何知道我的二进制可执行文件的内存占用