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

时间:2013-03-28 21:21:37

标签: c++ pointers comma-operator

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

delete p1,p2,p3,p4,p5;  

3 个答案:

答案 0 :(得分:20)

相当于:

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

也就是说,delete s p1然后将逗号运算符应用于结果(其中没有)和p2。简单地评估表达式p2p5并丢弃结果。

答案 1 :(得分: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的

答案 2 :(得分:1)

删除第一个。

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