Problema vector.erase e delete

di
Anonimizzato7129
il
1 risposte

Problema vector.erase e delete

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

1 Risposte

  • Re: Problema vector.erase e delete

    Ok mi rispondo da solo, magari può tornare utile a qualcuno . Questo è proprio il comportamento standard di vector, se elimino n elementi shifta a sinistra di n elementi riassegnandoli di 1 in 1 ed dealloca gli ultimi n. Bisogna quindi definire bene la classe contenuta con assegnazione ecc (in caso anche puntatori smart)

    bye
Devi accedere o registrarti per scrivere nel forum
1 risposte