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 was
new[]
ed和
delete
what was
new
ed。虽然在现代代码中,您应该避免大多数使用
new
,但它不再是动态创建对象的首选方式。请参阅
std::make_unique
std::make_shared
或使用标准容器。在什么情况下,可能需要动态分配函数指针?@Ayxan这将是另一个问题,但例如,您可能希望有一个要执行的任意操作列表。@Ayxan我已经很快将其发布到了这里:尽管这是特定于MSVC的,但g++在尝试编译时会出现以下类似错误:
错误:无法删除“int(*)()”类型的表达式。
。。奇怪的是,微软会在他们的文档中遗漏这么简单的东西:/
error C2541: 'delete': cannot delete objects that are not pointers