15

これはすべてのポインタを削除しますか、それとも最初のポインタ p1 だけを削除しますか?

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

3 に答える 3

22

これは以下と同等です:

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

つまり、それはdeletesp1であり、コンマ演算子が結果 (何もない) に適用され、p2. p2toの式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 に答える