如果我有三个指针要加倍:
rdf1 = new double [n];
rdf2 = new double [n];
rdf3 = new double [n];
我想用一个删除语句删除它们。类似的东西:
delete [] rdf1,rdf2,rdf3;
这样做的正确方法是什么?
答案 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;
我始终遵循一个原则,即我编写的代码应该很容易被我之后的代码所理解。因此,不是用任何花哨的结构来做这件事,我会用更常见的方式(上面的方法)来做。