繁体   English   中英

删除函数指针数组?

[英]Deleting an array of pointers to functions?

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

new运算符不能用于分配函数,但可用于分配函数指针。 下面的示例分配然后释放七个指向返回整数的函数的数组的数组。

 int (**p) () = new (int (*[7]) ()); delete *p; 

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

delete[] *p;

有谁能解释一下?

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

delete[] p;

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

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

如果我们添加一个typedef,

typedef int (*FPtr)();

new声明可以改写为

FPtr *p = new FPtr[7];

所以很明显资源应该随之发布

delete[] p;

正如别人所解释的那样


顺便说一下,VS 2008及以上的MSDN页面确实使用了正确的代码。

int (**p) () = new (int (*[7]) ());
delete [] p;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM