[英]Deleting an array of pointers vs deleting a vector of pointers
當我們打電話
delete[] array; // array is a pointer to an array
要么
delete[] vector; // vector is a pointer to a vector
假設它們是鏈接列表頭指針的數組/向量:這2條語句是否為它們中的每一項調用析構函數? 還是我們應該遍歷它們,刪除每個項目,然后delete []數組或向量本身?
讓我更具體一點,如果該數組持有帶有其析構函數的頭指針,則該數組將刪除其下一個節點或它指向的節點。
您的第二個代碼段不正確。 delete
和delete[]
是兩個不同的運算符。 delete
用於刪除new
創建的實例, delete[]
用於刪除new[]
創建的元素數組。
在C ++中,數組和向量不關心它們存儲的內容。 對於數組和向量,都需要先刪除每個項目(如果它們是使用new
分配的),然后再刪除數組和向量。
如果您這樣創建數組
Sample* arr[100];
for (int i = 0; i < 100; ++i) {
arr[i] = new Sample();
}
您需要像這樣刪除它們
for (int i = 0; i < 100; ++i) {
delete arr[i];
}
如果創建這樣的向量
vector<Sample*> arr;
for (int i = 0; i < 100; ++i) {
arr.push_back(new Sample());
}
您需要這樣刪除
for (int i = 0; i < 100; ++i) {
delete arr[i];
}
刪除指針數組delete []數組是合適的,但是對於指針向量,我將使用如下結構:
std::vector<Data*> m_data;
while(!m_data.empty()) delete m_data.back(), m_data.pop_back();
在std::vector
上調用delete[]
是不正確的C ++。 當向量超出范圍時,或者如果使用new
分配指向堆的指針delete
指針,則向量將被破壞。 在這兩種情況下,但是,破壞了陣列/矢量不調用delete
它包含指針-你需要的,如果你需要釋放該內存遍歷和自己做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.