【发布时间】:2016-04-22 10:26:50
【问题描述】:
下面我使用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 这不是个好主意...
-
根据您的代码,您可以删除“t1”指向的整个数组。您不能删除数组的单个元素。如果您使用了“Test *t1[5]; 然后为这 5 个指针中的每一个分配内存,那么您可以删除任何元素”
-
这是未定义的行为。不要这样做。您可以为这些对象显式调用析构函数。使用
new[]分配的可用内存仅使用delete[] -
简单的答案是你不能从这样的数组中“删除”东西。如果您希望能够动态添加 或 删除元素,请使用
std::vector。 -
@teivaz 当数组被删除(或不删除数组并有内存泄漏)时,这不会导致再次执行元素的析构函数吗?