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

Rav*_*jan 3 c++ delete-operator

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

char* charPtr = new char[100]
void* voidPtr = (void*)charPtr;
delete[] voidPtr;
Run Code Online (Sandbox Code Playgroud)

或者可以使用delete运算符释放它

delete voidPtr
Run Code Online (Sandbox Code Playgroud)

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

Sha*_*our 12

不,这是无效的,如果我们看一下C++草案标准,那么它是未定义的行为.删除说(强调我的未来): 5.3.5

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

和脚注78说:

意味着无法使用void*类型的指针删除对象,因为void不是对象类型.

另一方面,free允许你使用void*但是分配必须是via malloc,calloc或者realloc.