以下是否会产生未定义的行为:
void * something = NULL; char * buffer = new char[10]; something = buffer; buffer = NULL; delete [] something; // undefined??
我是否首先需要将某些东西投射到char *?
解决方法
@H_502_9@ 是的,严格地说,当你使用delete []时,你删除的指针的静态类型[]必须与你最初分配的数组的类型匹配,否则你会得到未定义的行为.通常,在许多实现中,对void *调用的delete []实际上是一个没有非平凡析构函数的类型的数组,但是不能保证.
delete[] buffer
要么
delete[] (char*)something
两者都有效.