caprone
13-07-2008, 18:23
1
inizio da un piccolo esempio:
list<oggetto*> obi;
list<oggetto*>::const_iterator it=obi.begin();
..
se voglio ad esempio eliminare un oggetto (creato dinamicamente con new) usando il metodo remove() e poi deallocare la memoria con delete()
perchè devo dichiarare un puntatore ad oggetto, dargli l'indirizzo puntato da *it e poi rimuovere quello, invece che usare direttamente *it?
mi spiego, perche devo mettere cosi
oggetto * obp=*it;
obi.remove(obp);
delete(obp);
invece di poter usare direttamente
obi.remove((*it));
delete((*it));
nel secondo caso il compilatore non mi da errore ma se vado in esecuzione mi va in errore il programma
2
un altro dubbio ancora più stupido è:
usando list o cmq un altro contenitore della standard library, il metodo push_back richiede che gli venga passato un riferimento all'elemento da inserire, un'istruzione di questo tipo
list<oggetto*>obi;
obi.push_back(new oggetto());
perche l'istruzione precedente è corretta?
nel senso, non dovrebbe essere qualcosa del tipo
obi.push_back(*new oggetto()); ?
grazie per l'attenzione
inizio da un piccolo esempio:
list<oggetto*> obi;
list<oggetto*>::const_iterator it=obi.begin();
..
se voglio ad esempio eliminare un oggetto (creato dinamicamente con new) usando il metodo remove() e poi deallocare la memoria con delete()
perchè devo dichiarare un puntatore ad oggetto, dargli l'indirizzo puntato da *it e poi rimuovere quello, invece che usare direttamente *it?
mi spiego, perche devo mettere cosi
oggetto * obp=*it;
obi.remove(obp);
delete(obp);
invece di poter usare direttamente
obi.remove((*it));
delete((*it));
nel secondo caso il compilatore non mi da errore ma se vado in esecuzione mi va in errore il programma
2
un altro dubbio ancora più stupido è:
usando list o cmq un altro contenitore della standard library, il metodo push_back richiede che gli venga passato un riferimento all'elemento da inserire, un'istruzione di questo tipo
list<oggetto*>obi;
obi.push_back(new oggetto());
perche l'istruzione precedente è corretta?
nel senso, non dovrebbe essere qualcosa del tipo
obi.push_back(*new oggetto()); ?
grazie per l'attenzione