Ciao a tutti, non riesco a venire a capo di questo.. se ho un vector e uso erase(iteratore) dovrebbe chiamarmi la delete sull'oggetto puntato da iteratore no? Invece a me chiama la delete sull'ultimo elemento del vector. Per farmi capire vi faccio un esempio
#include <iostream>
#include <vector>
using namespace std;
class C{
public:
int x;
C(int i):x(i){}
~C(){
cout<<"~C() "<<x<<endl;
}
};
main(){
vector<C> vec;
for(int i=0;i<10;i++){
vec.push_back(C(i));
}
cout<<"Adesso cancello "<<vec[3].x<<endl;
vec.erase(vec.begin()+3); //qua stampa ~C() 9... perchè non ~C() 3?
for(int i=0;i<vec.size();i++){
cout<<vec[i].x<<' '; //qua viene correttamente elimitato
}
}
Creo un vector di int 0 1 .... 9, poi cancello il 3 elemento e quindi mi aspetto che stampi ~C() 3
invece mi chiama la delete sull'ultimo elemento del vector e quindi stampa ~C() 9... ma perchè?
Qualcuno riesce a darmi una spiegazione? Grazie mille per l'aiuto