我必須修改一個非常大的方法,並有許多可能的執行流程。修改涉及使用new
在堆中分配char數組。我想確定這個數組是否正確釋放,但我想避免在所有可能的執行流程中執行delete[]
。另外,爲了避免未來的錯誤,我希望爲此做一些「更清潔」的事情。C++(而不是C++ 11)在非常大的方法中釋放數組的最佳方法
我已經想與new
到ALLOC陣列,然後將其包裝到一個本地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[]
。
您是否熟悉術語RAII?如果是這樣,你的問題是什麼? –
製作你自己的RAII包裝... –
爲什麼不使用'std :: string'? – NathanOliver