在一行中删除多个指针。C++

15

这会删除所有指针还是只删除第一个指针p1?

delete p1,p2,p3,p4,p5;  

2
为什么不尝试一下呢? - Tushar
3
它会删除最后一个。查找逗号运算符(顺便说一下,Java没有这个)。 - john
7
@john,我认为它实际上是删除第一个。delete的优先级高于, - Tushar
@JavaNewb,测试很容易,为什么不试试呢? - AndersK
1
@Tushar 傻我没检查。不过还是得到了三票! - john
显示剩余4条评论
3个回答

22

这相当于:

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

也就是说,它 删除p1,然后将逗号运算符应用于结果(没有结果),以及 p2。表达式 p2p5 简单地被评估并且结果被丢弃。


4
因为逗号运算符“,”显然只删除指向的第一个对象,而其他表达式被评估后结果被丢弃。
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;
//...

output:

~Aa1

....

~Aa2


1
它删除第一个。
逗号运算符评估逗号前面的内容,然后将其丢弃。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接