C++ delete*p是delete[]p的替代品吗?
以下代码来自 我认为这里应该使用C++ delete*p是delete[]p的替代品吗?,c++,arrays,C++,Arrays,以下代码来自 我认为这里应该使用delete[]p delete*p是否与delete[]p相同 >代码无效C++,因为只有指针指向对象可以被删除。code>*p的类型为int(*)(),它是一个函数指针,而不是指向对象的指针 即使在许可模式下,MSVC本身也不会编译: error C2541: 'delete': cannot delete objects that are not pointers 他们应该使用delete[]。delete*p与delete[]p不同。你说得对。它们不一样
delete[]p
delete*p
是否与delete[]p
相同 >代码无效C++,因为只有指针指向对象可以被删除。code>*p的类型为int(*)(
),它是一个函数指针,而不是指向对象的指针
即使在许可模式下,MSVC本身也不会编译:
error C2541: 'delete': cannot delete objects that are not pointers
他们应该使用
delete[]
。delete*p
与delete[]p
不同。你说得对。它们不一样。typedef
会让事情更清楚。无论如何,p[0]
没有初始化。它们有打字错误。delete[]
what wasnew[]
ed和delete
what wasnew
ed。虽然在现代代码中,您应该避免大多数使用new
,但它不再是动态创建对象的首选方式。请参阅std::make_unique
和std::make_shared
或使用标准容器。在什么情况下,可能需要动态分配函数指针?@Ayxan这将是另一个问题,但例如,您可能希望有一个要执行的任意操作列表。@Ayxan我已经很快将其发布到了这里:尽管这是特定于MSVC的,但g++在尝试编译时会出现以下类似错误:错误:无法删除“int(*)()”类型的表达式。
。。奇怪的是,微软会在他们的文档中遗漏这么简单的东西:/
error C2541: 'delete': cannot delete objects that are not pointers