Czy to usuwa wszystkie wskaźniki, czy po prostu usuwa pierwszy wskaźnik p1?usuwanie wielu wskaźników w jednym wierszu. C++
delete p1,p2,p3,p4,p5;
Czy to usuwa wszystkie wskaźniki, czy po prostu usuwa pierwszy wskaźnik p1?usuwanie wielu wskaźników w jednym wierszu. C++
delete p1,p2,p3,p4,p5;
jest równoważna:
(((((delete p1),p2),p3),p4),p5);
Oznacza to, że delete
s p1
a następnie operator przecinek nakłada się na skutek (którego nie jest określona) i p2
. Wyrażenia od p2
do p5
są po prostu obliczane, a wyniki odrzucane.
Usuwa pierwszy.
Operator przecinka ocenia, co znajduje się przed przecinkiem, a następnie odrzuca go.
Bo „” jest operatorem przecinka oczywiście tylko pierwszy obiekt wskazał zostanie usunięty, podczas gdy reszta wyrażeń jest oceniany, a wyniki są odrzucane:
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;
//...
wyjściowa:
~ Aa1
....
~ Aa2
Dlaczego nie spróbować? – Tushar
Usuwa ostatnią. Wyszukaj operator przecinka (coś, co Java nie ma przypadkowo). – john
@john Myślę, że to faktycznie usuwa pierwszą. 'delete' ma wyższy priorytet niż', ' – Tushar