Удаляет ли это все указатели или просто удаляет первый указатель p1?Удаление нескольких указателей в одной строке. C++
delete p1,p2,p3,p4,p5;
Удаляет ли это все указатели или просто удаляет первый указатель p1?Удаление нескольких указателей в одной строке. C++
delete p1,p2,p3,p4,p5;
Это эквивалентно:
(((((delete p1),p2),p3),p4),p5);
То есть, это delete
с p1
, а затем оператор запятой применяется к результату (из которых там нет) и p2
. Выражения p2
до p5
просто оцениваются и результаты отбрасываются.
Удаляет первый.
Оператор запятой оценивает то, что находится перед запятой, затем отбрасывает его.
Поскольку «» запятая оператор, очевидно, только первый объект указал будет удален, в то время как остальная часть выражения вычисляется и результаты отбрасываются:
class A{
public:
string name_;
A(){}
A(string name):name_(name){}
~A(){cout<<"~A"<<name_;}
};
int main(){
A* a1=new A("a1");
A* a2=new A("a2");
delete a1, a2;
cout<<"\n.....\n";
delete a2, a1;
//...
выход:
~ Aa1
....
~ Аа2
Почему бы вам не попробовать это? – Tushar
Удаляет последний. Посмотрите на оператор запятой (что-то Java не имеет кстати). – john
@john Я думаю, что он удаляет первый, на самом деле. 'delete' имеет более высокий приоритет, чем', ' – Tushar