2013-03-28 50 views
10

這是刪除所有的指針還是隻刪除第一個指針p1?在一行中刪除多個指針。 C++

delete p1,p2,p3,p4,p5; 
+1

你爲什麼不試試呢? – Tushar

+3

它刪除最後一個。查找逗號運算符(Java沒有附帶的東西)。 – john

+6

@john我認爲它實際上刪除了第一個。 'delete'具有比'更高的優先級,' – Tushar

回答

18

它等效於:

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

即,deletep1小號,然後將逗號操作者施加到結果(其中都沒有)和p2。簡單地評估表達式p2p5,並丟棄結果。

0

它刪除第一個。

逗號運算符評估逗號前面的內容,然後丟棄它。

3

因爲「」是逗號運算顯然只是第一對象指向被刪除,而表達式的其餘部分被評價且結果被丟棄:

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下調