2012-02-07 39 views
1

如果我想刪除原始類型值的動態分配的數組:原始類型動態分配數組的析構函數?

int *it = new int[10]

我只是把delete [] it在析構函數照顧妥善釋放內存?

OR

認識到,作爲一個指針是一個基本類型,並刪除動態分配的數組涉及做這樣的事情在析構函數:

for (size_t idx = 0; idx != 5; ++idx) 
     delete sp[idx]; 
    delete[] sp; 

我搞糊塗了關於這個問題,我的程序中有很多與內存相關的錯誤。

回答

5

如果您有:

int* it = new int[10]; 

正確的方法delete是:

delete[] it; 

如果你有這種類型的成員變量,你需要實現一個拷貝構造函數和賦值運算符爲這些默認版本是不夠的,或使該類不可複製。

因爲這是C++,我會建議使用std::vector<int>,因爲這將爲您處理內存管理。

+0

感謝您的清晰簡要的解釋。 – rrazd 2012-02-07 17:43:29

2

如果你要使用newdelete,一般的規則,遵循的是這樣的:用一樣多的delete S作爲你做new秒。

就你而言,你只需調用new[]一次。你應該只註冊一次delete[]

另外,如果您曾經將指針存儲在成員變量中,請考慮Rule of Three

我說「如果你打算使用newdelete」,因爲你經常不應該這樣做。使用RAII技術和標準容器,完全有可能編寫完全有用的程序,這些程序永遠不會直接調用newdelete

如果你想保持int秒的陣列,使用std::vector

class MyClass { 
    std::vector<int> it; 

    void SomeFun() { it.resize(10); } 
}; 

然後,在你的析構函數,無能爲力。矢量在沒有任何幫助的情況下消失。