C++(不是C++ 11)在非常大的方法中发布数组的最佳方法

Dan*_*Dan 1 c++ arrays pointers c++03 c++98

我必须使用许多可能的执行流修改一个非常大的方法.修改涉及使用在堆中分配char数组new.我想确保正确释放此数组,但我想避免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 ...;
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是,如果我能确定rawPtr无论程序失败,异常,传入return语句等都能正确发布.

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

Ant*_*hev 5

您可以创建vector<char>长度1024,然后使用指向其第一个元素的指针作为rawPtr.这将是不需要调用new和delete[]再.