下面我使用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