下面我使用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
@bku_drytt這不是一個好主意...... – songyuanyao
根據您的代碼,您可以刪除由「t1」指向的整個數組。您不能刪除數組的各個元素。如果你已經使用了「Test * t1 [5];然後爲這5個指針中的每一個指定了內存,那麼你可以刪除任何元素」 – sameerkn
這是未定義的行爲。不要這樣做。您可以顯式調用這些對象的析構函數。使用'new []'分配的空閒內存僅使用delete []' – teivaz