删除函数指针数组?

cod*_*ddy 5 c++ new-operator

以下是我从MSDN中复制的有关new运算符的内容:

new操作者不能被用于分配的功能,但它可用于指针分配给功能.下面的示例分配然后释放七个指向返回整数的函数的数组的数组.

int (**p) () = new (int (*[7]) ());
delete *p;
Run Code Online (Sandbox Code Playgroud)

好吧,第一行没有什么奇怪的,它为函数分配了一个指针数组,但我只是不明白第二行如何删除该数组?我认为它应该是:

delete[] *p;
Run Code Online (Sandbox Code Playgroud)

有谁能解释一下?

Dmi*_*kov 5

坦率地说,正确的答案写在avakar的评论中.正确的代码是

delete[] p;
Run Code Online (Sandbox Code Playgroud)

delete *p; 有两个原因是不正确的:

  1. 我们必须使用delete[]所有动态分配的数组.使用 delete将导致未定义的行为.
  2. 无法删除指向静态和成员函数的指针