我们可以通过在void *上使用delete []运算符来释放原始数据类型的数组。 实施例
char* charPtr = new char[100]
void* voidPtr = (void*)charPtr;
delete[] voidPtr;
或者可以使用删除操作符(如
)释放它delete voidPtr
我不希望它调用析构函数。我只期望它释放新操作员分配的内存。
答案 0 :(得分:12)
这不是有效的,如果我们查看undefined behavior 5.3.5
删除,那就是C++ draft standard(强调我的前进} EM>):
操作数应为指向对象类型或类类型的指针。如果是类类型,则操作数被上下文隐式转换(第4节)到指向对象类型的指针。 delete-expression的结果类型为void。 78
和脚注78说:
此表示无法使用void * 类型的指针删除对象,因为void不是对象类型。
另一方面,free允许您使用 void *,但分配必须通过malloc
,calloc
或{{1 }}