15

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

delete p1,p2,p3,p4,p5;  
4

3 回答 3

22

它相当于:

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

也就是说,它deletesp1然后将逗号运算符应用于结果(没有结果)和p2p2简单地p5评估表达式并丢弃结果。

于 2013-03-28T21:24:23.697 回答
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;
//...

输出:

~Aa1

……

~Aa2

于 2013-03-28T21:30:27.093 回答
1

它删除了第一个。

逗号运算符评估逗号前面的内容,然后将其丢弃。

于 2013-03-28T21:26:45.067 回答