2013-03-28 2 views
10

Удаляет ли это все указатели или просто удаляет первый указатель p1?Удаление нескольких указателей в одной строке. C++

delete p1,p2,p3,p4,p5; 
+1

Почему бы вам не попробовать это? – Tushar

+3

Удаляет последний. Посмотрите на оператор запятой (что-то Java не имеет кстати). – john

+6

@john Я думаю, что он удаляет первый, на самом деле. 'delete' имеет более высокий приоритет, чем', ' – Tushar

ответ

18

Это эквивалентно:

(((((delete p1),p2),p3),p4),p5); 

То есть, это delete с p1, а затем оператор запятой применяется к результату (из которых там нет) и p2. Выражения p2 до p5 просто оцениваются и результаты отбрасываются.

0

Удаляет первый.

Оператор запятой оценивает то, что находится перед запятой, затем отбрасывает его.

3

Поскольку «» запятая оператор, очевидно, только первый объект указал будет удален, в то время как остальная часть выражения вычисляется и результаты отбрасываются:

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

Смежные вопросы