这是删除所有指针还是只删除第一个指针p1?
delete p1,p2,p3,p4,p5;
相当于:
(((((delete p1),p2),p3),p4),p5);
即,如果delete
= p1
,然后对结果(没有)和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
删除第一个。
逗号运算符计算逗号前面的内容,然后丢弃它。