2016-04-22 43 views
1

下面我使用new[]分配了5個結構對象的數組,其中只有3個用於將我的數據&剩餘的我想要刪除。以下是該計劃。它會產生最後提到的編譯錯誤。只刪除動態分配的結構對象數組中的特定元素

#include<iostream> 

using namespace std; 

struct Test 
{ 
     int data; 
     Test() { cout<<"struct created"<<endl; } 
}; 
int main() 
{ 
     Test *t1; 
     t1 = new Test[5]; 
     int i,n; 
     n=3; 
     for(i=0;i<n;i++) 
       t1[i].data=(i+10); 
     while(i<5) 
     { 
       delete t1[i]; 
       i++; 
     } 
} 

編譯錯誤是

error: type ‘struct Test’ argument given to ‘delete’, expected pointer 
+1

@bku_drytt這不是一個好主意...... – songyuanyao

+1

根據您的代碼,您可以刪除由「t1」指向的整個數組。您不能刪除數組的各個元素。如果你已經使用了「Test * t1 [5];然後爲這5個指針中的每一個指定了內存,那麼你可以刪除任何元素」 – sameerkn

+0

這是未定義的行爲。不要這樣做。您可以顯式調用這些對象的析構函數。使用'new []'分配的空閒內存僅使用delete []' – teivaz

回答

2

的陣列,在其壽命期間,正好包含儘可能多的對象,因爲它沒有被首次創建時。您不能添加或刪除它們。當數組被銷燬時,所有包含的對象都將被銷燬。

如果您想要一個包含可變數量對象的數組,那麼您正在尋找std::vector

1

您無法從數組中刪除元素的原因是因爲您爲此數組分配了一系列內存。你不能釋放你分配的一部分。這是全部或沒有。分配對象時同樣的事情,你不能釋放它的一部分。

如果要從數組中刪除對象(不使用std :: vector,如user2079303所述),仍然可以使用指針數組。 但是,當數組必須被銷燬時(這似乎不是一個好主意),你將不得不管理每個元素。