如何在一条删除语句中删除多个动态分配的数组

How to delete multiple dynamically allocated arrays in a single delete statement?

本文关键字:删除 动态分配 数组 语句 一条      更新时间:2023-10-16

如果我有3个指针要双精度:

rdf1 = new double [n];
rdf2 = new double [n];
rdf3 = new double [n];

我想用单个delete语句删除它们。例如:

delete [] rdf1,rdf2,rdf3;

正确的做法是什么?

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

delete [] rdf1,rdf2,rdf3;

更不幸的是,它并不像你想象的那样。它将,视为逗号操作符,因此最终只删除rdf1(因为操作符delete优先于操作符,)。

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

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

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

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

但是,究竟为什么要关心是一个语句还是三个语句呢?

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

operator delete[]的标准形式将只接受一个参数。

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

我总是遵循一个原则,我写的代码应该很容易被我之后的人理解。因此,与其使用任何花哨的结构,不如使用更常见的方法(如上所述)。