|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Jul 2008
Messaggi: 9
|
[c++] un paio di dubbi su iteratori, libreria std, riferimenti a var
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 |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
L'operatore new serve proprio ad allocare memoria per il nuovo dato e restituirtelo (se è un dato semplice lo alloca e te lo restituisce, se è un oggetto lo alloca, chiama il costruttore e te ne restituisce il puntatore), quindi non vedo il perché usare l'asterisco.
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Jul 2008
Messaggi: 9
|
grazie, sai darmi risposta anche alla prima domanda?
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Be', usi un const_iterator, quando lanci la delete (*it) che succede?
Prova ad usare un iteratore semplice: list<T>::iterator.
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Jul 2008
Messaggi: 9
|
hai ragione
|
|
|
|
|
|
#6 |
|
Junior Member
Iscritto dal: Jul 2008
Messaggi: 9
|
no adesso riguardo al primo punto, mi funziona sia usando un const_iterator che un iterator normale..
allora non ho capito una cosa, un const_iterator è come un puntatore costante o un puntatore a costante? |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
- stiamo parlando di un iteratore giusto? Quindi un puntatore, se deve iterare, a senso non potrà essere vincolato a puntare sempre allo stesso indirizzo... Quindi escludiamo che un const_iterator sia un puntatore costante. - un const_iterator è un puntatore a costante, rispetto all'iterator semplice a cosa potrebbe servire? Anche qui ci aiuta la logica: sapendo che tramite un puntatore a costante non possiamo modificare la memoria puntata possiamo dedurre che un const_iterator è più appropriato come sitema di accesso agli elementi di una lista quando dobbiamo effettuare solo letture. DISCLAIMER: dato che non ho controllato l'esattezza delle affermazioni qui sopra (sono state tratte in parte dai ricordi che ho del C++ [si parla ormai di 3 anni fa] e in parte da deduzioni) non mi assumo nessuna responsabilità per evenutali castronerie sparate
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Non ne sono sicuro, comunque non avrebbe senso un iteratore costante, l'iteratore varia, ma contiene un puntatore costante. Se lo leggi, perfetto, se provi a modificare qualcosa hai un errore (la delete di prima, ad esempio).
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#9 | |
|
Junior Member
Iscritto dal: Jul 2008
Messaggi: 9
|
Quote:
grazie ad entrambi |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:31.




















