C++(不是 C++11)在非常大的方法中释放数组的最佳方式

C++ (not C++11) Best way to release array in very large methods

我必须修改一个非常大的方法,其中包含许多可能的执行流程。修改涉及使用 new 在堆中分配一个 char 数组。我想确保这个数组被正确释放,但我想避免在所有可能的执行流程中执行 delete[] 的需要。此外,我想为此做一些事情 "cleaner" 以避免将来出现错误。

我想用 new 分配数组,然后将其包装到本地 std::vector (但保留对原始指针的引用,因为该方法大量使用此引用)并让包装器在超出范围时删除原始指针。

这里我附上一个例子。此示例的目的是显示使用原始指针执行的操作类型。

char *rawPtr = new char[1024];
std::vector wrapper(rawPtr, rawPtr + 1024); // <= Does it assure that rawPtr will be released properly?
...
for(int i = 0; i < 1024; i++)
    rawPtr[i] = ...;

rawPtr += sizeof(...);
...
rawPtr -= ...;
if(...)
    return ...;

return ...;

所以,我的问题是我是否可以确定 rawPtr 将被正确释放,而不管程序失败、异常、传入的 return 语句等

PD.: 我不能使用 C++11,我对智能指针最相似的东西是 auto_ptr,它使用 delete,而不是 delete[]

std::vector 没有 newed 指针的移动构造函数。会发生什么,是为 std::vector 使用制作了一个副本。所以你仍然需要删除。

您可以创建长度为 1024 的 vector<char>,然后使用指向其第一个元素的指针作为 rawPtr。以后就不用调用newdelete[]了。