使用void指针上的delete []运算符释放内存

时间:2014-02-27 14:12:52

标签: c++ delete-operator

我们可以通过在void *上使用delete []运算符来释放原始数据类型的数组。 实施例

char* charPtr = new char[100]
void* voidPtr = (void*)charPtr;
delete[] voidPtr;

或者可以使用删除操作符(如

)释放它
delete voidPtr

我不希望它调用析构函数。我只期望它释放新操作员分配的内存。

1 个答案:

答案 0 :(得分:12)

这不是有效的,如果我们查看undefined behavior 5.3.5 删除,那就是C++ draft standard强调我的前进):

  

操作数应为指向对象类型或类类型的指针。如果是类类型,则操作数被上下文隐式转换(第4节)到指向对象类型的指针。 delete-expression的结果类型为void。 78

和脚注78说:

  

表示无法使用void * 类型的指针删除对象,因为void不是对象类型。

另一方面,free允许您使用 void *,但分配必须通过malloccalloc或{{1 }}