正在检查未完全填充的数组中的char out是否为空

Checking if char out of not fully filled array is empty

本文关键字:char out 是否 数组 检查 填充      更新时间:2023-10-16

正如您所知,如果您想删除任何类型的动态分配数组(您在上面使用了运算符new[]),您应该使用delete[]来删除它。

现在,我想知道是否有任何方法可以删除动态分配数组中的单个对象。

char* someNewArray = new char[someInt];
//Add values to the array
delete &someNewArray[2] //or maybe delete[] instead of just delete

不可以。

运算符new以其数组形式分配一个单独的内存元素,该元素能够包含您要求的元素数量。您只能使用delete[]解除分配整个块。

若你们想一个接一个地解除分配块,你们就必须以相同的粒度来分配它们,也就是一个一个地分配。

编辑:

对于大小为1的对象来说,这将没有什么意义,因为分配块的过载将在sizeof(char)面前很大。在这种情况下,更有效的方法是分配大小为someInt -1的新块,使用memcpy,然后用delete[] 释放初始块

char * tmp = new char[someInt -1];
memcpy(tmp, someNewArray, 2);
memcpy(tmp+2, someNewArray + 3, someInt - 3);
delete[] someNewArray;
someNewArray = tmp;

但如果你添加一个更大的对象数组,比如LObj,而不是

LObj * newArray = new LObj[someInt];

你可以使用:

LObj ** newArray = new (LObj *)[someInt];
for (i=0; i<someInt; i++) {
    newArray[i] = new LObj;
}

然后是有意义的使用:

delete newArray[2];
newArray[2] = NULL;