Удаление нескольких указателей в одной строке. С++

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

delete p1,p2,p3,p4,p5;  

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

Он удаляет первый.

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