我必须使用许多可能的执行流程来修改非常大的方法。修改涉及使用new
在堆中分配char数组。我想确保正确释放此数组,但我想避免在所有可能的执行流程中都需要执行delete[]
。另外,我想为此做些“清洁”以避免将来的错误。
我曾考虑过使用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[]
。 最佳答案
您可以创建长度为1024的vector<char>
,然后将指向其第一个元素的指针用作rawPtr。然后,无需调用new
和delete[]
。