在c++中删除

Deleting in C++

本文关键字:删除 c++      更新时间:2023-10-16
struct item   
{ 
  unsigned int a, b, c;
};
item* items[10];    
delete items[5];    
items[5] = NULL;

上面的代码可以工作

但是下面的方法不起作用

int * arr1[30];
delete (arr1+5);

我是一个初学者,请告诉我为什么我可以在结构指针的情况下删除,而不是在int的情况下指针

你似乎误解了delete的作用:它纯粹是为了释放new分配的内存,而不是"删除"数组的元素。

所以你可以这样使用:

int *p = new int;
//...
delete p;

当你分配数组时,你必须使用delete[],像这样:

int *q = new int[23];
//...
delete [] q;

但是在任何时候你都不应该尝试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;
}

您是否在任何地方分配堆内存?在上面的代码中,您没有这样做。您很幸运,第一次删除没有崩溃。

当使用(arr1+5)方法时,您正在传递索引5处数组插槽本身的内存地址,而不是插槽包含的int*。对于delete, int*包含在索引5的插槽中,您必须取消对指针值的引用,例如:

delete *(arr1+5);