如何从自定义数组中删除元素

How to delete an element from custom array

本文关键字:删除 元素 数组 自定义      更新时间:2023-10-16

下面是我的代码

Box **b = 0;
//memory allocated for elements of rows.
b = new Box *[ROWS] ;
//memory allocated for  elements of each column.
for( int i = 0 ; i < ROWS ; i++ )
    b[i] = new Box[COLUMNS];       
b[0][0] = NULL;

为什么我得到错误说:"no viable overload '='"在最后一行代码

您的代码中有一些错误。首先,当您的类型是Box时,为什么要分配int ?应分别为b = new Box *[ROWS]b[i] = new Box[COLUMNS];

同时,你正在尝试设置一个内存位置,你之前已经用delete释放了,这是危险的,可能会导致不可预见的后果。

这条线

b[0][0] = NULL;

是不可能的,因为您在b[0][0]的类型不是Box*,而是Box

new int*将返回int**。编译器报错int**不能转换为Box** (b类型)

您声明了Box的锯齿数组,但分配了new int*[] -那里发生了什么?

b[0][0]的类型也是Box&。你不能赋值NULL,除非

  • Box::Box有一个隐式构造函数,接受NULL可转换为的类型的形参
  • Box::Box定义了一个赋值操作符重载,接受如下形参

你没有在Box类中重载'='

b[0][0] = NULL;

这是错误的,原因有两个:

  • b[0][0]表示对象类型Box(因为bBox**,所以b[0]Box*)。你试图给它分配一个指针,这是一个错误(除非Box是从指针转换的)。
  • 你刚刚删除了b指向的内存,所以解引用它是一个错误。

删除那一行。根据您之后计划对b做什么,分配b = NULL以避免悬空指针可能是有意义的。