2013-03-28 11 views
10

Löscht dies alle Zeiger oder löscht dies nur den ersten Zeiger p1?löschen mehrere Zeiger in einer Zeile. C++

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

Warum versuchen Sie es nicht? – Tushar

+3

Es löscht den letzten. Suchen Sie den Komma-Operator (etwas, das Java nicht zufällig hat). – john

+6

@john Ich denke, es löscht die erste, eigentlich. 'delete' hat eine höhere Priorität als' '' ' – Tushar

Antwort

18

Es ist äquivalent zu:

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

Das heißt, es delete s p1 und dann wird das Komma-Operator auf das Ergebnis angewendet (von denen es keinen gibt) und p2. Die Ausdrücke p2 bis p5 werden einfach ausgewertet und die Ergebnisse verworfen.

0

Es löscht die erste.

Der Komma-Operator wertet aus, was vor dem Komma steht, verwirft es dann.

3

Weil ‚‘ ist Komma-Operator offensichtlich nur das erste Objekt zeigte auf wird gelöscht, während der Rest der Ausdrücke ausgewertet und die Ergebnisse werden verworfen:

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; 
//... 

Ausgabe:

~ Aa1

....

~ Aa2