以下代码来自the Microsoft Documentation
int (**p) () = new (int (*[7]) ());
delete *p;
我认为这里应该使用delete [] p
。
delete *p
与delete [] p
相同吗?
答案 0 :(得分:16)
该代码是无效的C ++,因为只能删除指向对象的指针。 *p
的类型为int (*)()
,它是一个函数指针,而不是指向对象的指针。
即使在许可模式下,即使MSVC本身也不会编译它:
error C2541: 'delete': cannot delete objects that are not pointers
他们应该改用delete []
。