下面我使用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
答案 0 :(得分:2)
数组在其生命周期中包含与首次创建时一样多的对象。你不能添加更多也不能删除&#34;他们走了。当数组被销毁时,所有包含的对象都将被销毁。
如果您想要一个包含可变数量对象的数组,那么您正在寻找std::vector
。
答案 1 :(得分:1)
您无法从阵列中删除元素的原因是您为此阵列分配了一系列内存。并且您无法释放您分配的部分内容。它全有或全无。分配对象时也是如此,你不能释放它的一部分。
如果要从数组中删除对象(不使用std :: vector作为user2079303表示),您仍然可以使用指针数组。 但是,当阵列必须被销毁时,你必须自己管理每个元素(这似乎不是一个好主意)。