以下是我从MSDN约new
运营商复制:删除指向函数的指针数组?
的
new
运营商不能用于分配的功能,但所用的指针分配的功能它可以 。以下示例 分配并将七个指针的数组释放到函数 返回整数。int (**p)() = new (int (*[7])()); delete *p;
那么有什么奇怪的与第一线,它分配一个指针数组的功能,但我就是不明白,第二是如何删除该阵列?我认为它应该是:
delete[] *p;
任何人都可以解释这一点吗?
以下是我从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;
是,,,,,, –
不,应该是'删除[] p'(星号)。 – avakar
以及如何“删除* p;”已验证?这就是我无法想出的 – codekiddy