这会删除所有指针还是仅删除第一个指针 p1?
delete p1,p2,p3,p4,p5;
它相当于:
(((((delete p1),p2),p3),p4),p5);
也就是说,它delete
sp1
然后将逗号运算符应用于结果(没有结果)和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
……
~Aa2
它删除了第一个。
逗号运算符评估逗号前面的内容,然后将其丢弃。