如何在单个delete语句中删除多个动态分配的数组?

时间:2011-07-14 14:22:14

标签: c++ pointers dynamic delete-operator

如果我有三个指针要加倍:

rdf1 = new double [n];

rdf2 = new double [n];

rdf3 = new double [n];

我想用一个删除语句删除它们。类似的东西:

delete [] rdf1,rdf2,rdf3;

这样做的正确方法是什么?

3 个答案:

答案 0 :(得分:11)

不幸的是,这在语法上是正确的:

delete [] rdf1,rdf2,rdf3;

更不幸的是,它没有按照你的想法做到。它将,视为comma operator,因此最终仅删除rdf1(因为运算符delete优先于运算符,)。

必须 编写单独的delete []表达式以获得预期的行为。

delete [] rdf1;
delete [] rdf2;
delete [] rdf3;

答案 1 :(得分:7)

公平地说,您可以将其作为单个语句进行,而不是作为delete []运算符的单个调用:

(delete [] rdf1, delete [] rdf2, delete [] rdf3);

但是,为什么世界上你在乎它是一个还是三个?

答案 2 :(得分:6)

不,这不是正确的方法。你必须分别在每个指针上调用delete []

operator delete[]的标准格式只需要一个参数。

delete [] rdf1;
delete [] rdf2;
delete [] rdf3;

我始终遵循一个原则,即我编写的​​代码应该很容易被我之后的代码所理解。因此,不是用任何花哨的结构来做这件事,我会用更常见的方式(上面的方法)来做。