在C++中删除

Kun*_*nal 2 c++

struct item   
{ 
  unsigned int a, b, c;
};

item* items[10];    
delete items[5];    
items[5] = NULL;
Run Code Online (Sandbox Code Playgroud)

上面的代码有效

但是下面的方法不起作用

int * arr1[30];

delete (arr1+5);
Run Code Online (Sandbox Code Playgroud)

我是初学者,请告诉我为什么我能够在结构指针的情况下删除但不能在int指针的情况下删除

Stu*_*etz 13

你似乎误解了delete它是什么:它纯粹而且简单地释放分配的内存new,而不是'删除'数组的元素.

所以你可以像这样使用它:

int *p = new int;
//...
delete p;
Run Code Online (Sandbox Code Playgroud)

分配数组时,必须改为使用delete[],如下所示:

int *q = new int[23];
//...
delete [] q;
Run Code Online (Sandbox Code Playgroud)

但是在任何时候你都不应该尝试delete一些没有被new编辑过的东西,或者使用不匹配的版本delete,例如delete [] p;或者delete q;以上版本.

如果您真正想要的是某种"数组",您可以从中删除元素,请尝试以下方法:

#include <vector>

struct item
{
    unsigned int a, b, c;
};

int main()
{
    std::vector<item> items(10);
    items[5].a = 23;
    items.erase(items.begin() + 5);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)