[英]Deleting an array of pointers to functions?
以下是我从MSDN中复制的关于new
运算符的内容:
new
运算符不能用于分配函数,但可用于分配函数指针。 下面的示例分配然后释放七个指向返回整数的函数的数组的数组。int (**p) () = new (int (*[7]) ()); delete *p;
好吧,第一行没有什么奇怪的,它为函数分配了一个指针数组,但我只是不明白第二行如何删除该数组? 我认为它应该是:
delete[] *p;
有谁能解释一下?
坦率地说,正确的答案写在avakar的评论中。 正确的代码是
delete[] p;
delete *p;
有两个原因是不正确的:
delete[]
。 使用delete
将导致未定义的行为。 如果我们添加一个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.