以下代码来自Microsoft文档
int (**p) () = new (int (*[7]) ());
delete *p;
我认为这里应该使用delete [] p
。
delete *p
和delete [] p
一样吗?
以下代码来自Microsoft文档
int (**p) () = new (int (*[7]) ());
delete *p;
我认为这里应该使用delete [] p
。
delete *p
和delete [] p
一样吗?
那段代码是无效的C++,因为只有指向对象的指针才能被删除。 *p
的类型是 int (*)()
,它是函数指针,而不是指向对象的指针。
即使在允许模式下,MSVC本身也不能编译它:
error C2541: 'delete': cannot delete objects that are not pointers
他们应该使用delete []
。
error: cannot delete expression of type 'int (*)()'
。 ..看起来微软在他们的文档中错过了这么简单的东西 :/ - txtechhelp
delete *p
与delete [] p
不同。 - Jarod42typedef
会让事情更清晰。 - Jarod42p[0]
没有被初始化。他们打错了。 - Jarod42new[]
创建的内容,并释放已经使用new
创建的数据。虽然在现代代码中,应该避免大多数对new
的使用,因为它不再是动态创建对象的首选方式。相反,可以尝试使用std::make_unique
和std::make_shared
,或者使用标准容器来代替。 - François Andrieux