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

viv*_*vek 2 c++ pointers dynamic delete-operator

如果我有三个指针加倍:

rdf1 = new double [n];

rdf2 = new double [n];

rdf3 = new double [n];
Run Code Online (Sandbox Code Playgroud)

我想用一个删除语句删除它们.就像是 :

delete [] rdf1,rdf2,rdf3;
Run Code Online (Sandbox Code Playgroud)

什么是正确的方法呢?

Arm*_*yan 11

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

delete [] rdf1,rdf2,rdf3;
Run Code Online (Sandbox Code Playgroud)

更不幸的是,它没有做你认为它做的事情.它把,一个逗号操作,从而最终只删除rdf1(因为运营商delete有超过运算符优先级,).

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

delete [] rdf1;
delete [] rdf2;
delete [] rdf3;
Run Code Online (Sandbox Code Playgroud)


and*_*ski 7

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

(delete [] rdf1, delete [] rdf2, delete [] rdf3);
Run Code Online (Sandbox Code Playgroud)

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


Alo*_*ave 6

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

标准形式operator delete[]只需要一个参数.

delete [] rdf1;
delete [] rdf2;
delete [] rdf3;
Run Code Online (Sandbox Code Playgroud)

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