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

时间:2014-10-13 05:15:00

标签: c++ pointers memory dynamic delete-operator

如您所知,如果要删除任何类型的动态分配的数组(使用运算符new[]),则应使用delete[]来删除它。

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

char* someNewArray = new char[someInt];

//Add values to the array

delete &someNewArray[2] //or maybe delete[] instead of just delete

1 个答案:

答案 0 :(得分:1)

不,你不能。

运算符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;