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;
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;
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.
Es löscht die erste.
Der Komma-Operator wertet aus, was vor dem Komma steht, verwirft es dann.
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
Warum versuchen Sie es nicht? – Tushar
Es löscht den letzten. Suchen Sie den Komma-Operator (etwas, das Java nicht zufällig hat). – john
@john Ich denke, es löscht die erste, eigentlich. 'delete' hat eine höhere Priorität als' '' ' – Tushar