Как удалить несколько динамически распределенных массивов в одном операторе удаления? - PullRequest
2 голосов
/ 14 июля 2011

Если у меня есть 3 указателя для удвоения:

rdf1 = new double [n];

rdf2 = new double [n];

rdf3 = new double [n];

Я хочу удалить их с помощью одного delete .что-то вроде:

delete [] rdf1,rdf2,rdf3;

Какой правильный способ сделать это?

Ответы [ 3 ]

11 голосов
/ 14 июля 2011

К сожалению, это синтаксически правильно:

delete [] rdf1,rdf2,rdf3;

Более того, к сожалению, это не делает то, что вы думаете, что делает. Он обрабатывает , как оператор запятой , таким образом, в конечном итоге удаляя только rdf1 (так как оператор delete имеет приоритет над оператором ,).

Вы должны написать отдельные delete [] выражения, чтобы получить ожидаемое поведение.

delete [] rdf1;
delete [] rdf2;
delete [] rdf3;
7 голосов
/ 14 июля 2011

Чтобы быть справедливым, вы можете сделать это как один оператор , а не как единственный вызов оператора delete []:

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

Но почему в миреВас волнует, одно это утверждение или три?

6 голосов
/ 14 июля 2011

Нет, это не правильный путь.Вы должны позвонить delete [] на каждый из указателей в отдельности.

Стандартная форма operator delete[] будет принимать только один параметр.

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

Я всегда придерживаюсь одного принципа, что код, который я пишу, должен быть легко понятным для того, кто работает над ним после меня,Поэтому вместо того, чтобы делать это с любыми причудливыми конструкциями, я бы сделал это более общеизвестным способом (см. Выше).

...