-Ivan-
18-11-2013, 11:09
Sono sempre dietro a fare esercizi in C++, non credo di aver capito bene cosa faccia questo codice (l'ultimo for):
vector<MyClass*> elements;
for( int i=0; i < 512; ++i )
elements.push_back(new MyClass);
for( vector<MyClass*>::iterator j = elements.begin(); j != elements.end(); ++j )
delete *j;
Debuggando mi sono accorto che l'ultimo for non fa altro che richiamare il distruttore per gli oggetti ma non li elimina.
Quel che so è che gli iterator sono puntatori, dunque j è un puntatore a oggett MyClass*.
Quando eseguo delete *j quindi sto dicendo di liberare lo spazio in memoria dell'oggetto MyClass* che, per quel che ne so, dovrebbero essere gli elementi dentro al vettore.
So che l'intero ciclo for può essere eliminato e può essere richiamato semplicemente empty() sul vettore se l'obietto è solo svuotarlo ma in questo caso i distruttori non vengono richiamati ed io ho bisogno di farlo.
Cercando su internet ho trovato che la soluzione potrebbe essere:
delete * j;
j = elements.erase(j);
però non ho trovato la spiegazione del perchè.
vector<MyClass*> elements;
for( int i=0; i < 512; ++i )
elements.push_back(new MyClass);
for( vector<MyClass*>::iterator j = elements.begin(); j != elements.end(); ++j )
delete *j;
Debuggando mi sono accorto che l'ultimo for non fa altro che richiamare il distruttore per gli oggetti ma non li elimina.
Quel che so è che gli iterator sono puntatori, dunque j è un puntatore a oggett MyClass*.
Quando eseguo delete *j quindi sto dicendo di liberare lo spazio in memoria dell'oggetto MyClass* che, per quel che ne so, dovrebbero essere gli elementi dentro al vettore.
So che l'intero ciclo for può essere eliminato e può essere richiamato semplicemente empty() sul vettore se l'obietto è solo svuotarlo ma in questo caso i distruttori non vengono richiamati ed io ho bisogno di farlo.
Cercando su internet ho trovato che la soluzione potrebbe essere:
delete * j;
j = elements.erase(j);
però non ho trovato la spiegazione del perchè.