これはすべてのポインタを削除しますか、それとも最初のポインタ p1 だけを削除しますか?
delete p1,p2,p3,p4,p5;
これは以下と同等です:
(((((delete p1),p2),p3),p4),p5);
つまり、それはdelete
sp1
であり、コンマ演算子が結果 (何もない) に適用され、p2
. p2
toの式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
最初のものを削除します。
コンマ演算子は、コンマの前にあるものを評価してから破棄します。