仅删除动态分配的结构对象数组的特定元素

时间:2016-04-22 10:26:51

标签: c++ arrays pointers free

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

2 个答案:

答案 0 :(得分:2)

数组在其生命周期中包含与首次创建时一样多的对象。你不能添加更多也不能删除&#34;他们走了。当数组被销毁时,所有包含的对象都将被销毁。

如果您想要一个包含可变数量对象的数组,那么您正在寻找std::vector

答案 1 :(得分:1)

您无法从阵列中删除元素的原因是您为此阵列分配了一系列内存。并且您无法释放您分配的部分内容。它全有或全无。分配对象时也是如此,你不能释放它的一部分。

如果要从数组中删除对象(不使用std :: vector作为user2079303表示),您仍然可以使用指针数组。 但是,当阵列必须被销毁时,你必须自己管理每个元素(这似乎不是一个好主意)。