|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Apr 2007
Messaggi: 263
|
[c++] Stl: come fare?
Salve a tutti,
Volevo chiedervi come si utilizzano esattamente (anche dal punto di vista della memoria...). Qualcuno conosce delle guide in rete. Io ne ho trovate qualcune ma fanno tutte degli esempi con int, ma a me interesserebbero gli oggetti.... |
![]() |
![]() |
![]() |
#2 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
che vuol dire "dal punto di vista della memoria"...?
![]() comunque vedi se ti è d'aiuto www.cplusplus.com |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Apr 2007
Messaggi: 263
|
|
![]() |
![]() |
![]() |
#4 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
ovviamente la prima, in quanto non devi preoccuparti di gestire l'allocazione e deallocazione; però non sempre è attuabile perché gli oggetti in questione potrebbero occupare molto spazio ed essere tanti, e perdipiù le locazioni del vettore spesso sono allocate in numero maggiore di quelle effettivamente utilizzate (vedi vector::capacity()), quindi non è difficile che capiti di dover preferire la seconda.
|
![]() |
![]() |
![]() |
#5 | ||
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Quote:
Se il vector è una collection di oggetti dichiarati staticamente e che possono essere passati tramite il costruttore di copia allora il primo. Se invece bisogna inserire un dato oggetto passato per puntatore al tuo metodo allora il secondo. Ovviamente dovrai stabilire anche chi e come distrugge gli oggetti contenuti: se l'oggetto esiste anche al di fuori della tuo collection probabilmente non tocca alla classe che contiene la tua collection a distruggerlo. Se l'oggetto esiste solo in quanto contenuto nella collection allora deve distruggerlo al classe che contiene la collection. |
||
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11782
|
In generale se l'oggetto ha semantica di valore (in pratica puo' essere copiato ed ha un costruttore che non accetta parametri) puoi memorizzare gli oggetti in un container STL.
Se una di queste condizioni non e' valida, devi memorizzare puntatori e occuparti tu della deallocazione, oppure scriverti qualche template che te lo automatizza (non e' difficilissimo ma neppure banale). Non puoi usare auto_ptr nelle collezioni STL, e' illegale, perche' pur avendo un costruttore di copia, non ha semantica di valore.
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11782
|
Quote:
http://blogs.ugidotnet.org/Franny/ar.../21/88478.aspx
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Non è quello che ho scritto io ?
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11782
|
Non necessariamente cionci. Immagina di scrivere un Observer Pattern, dove la classe Observer tiene una lista STL di oggetti in ascolto su un evento. Li terra' ovviamente sotto forma di puntatori perche' i Listener in generale non hanno semantica di valore. Ora, quando l'oggetto Observer finisce il suo compito, distrugge la lista di Listener, ma NON e' sua responsabilita' distruggere anche i Listener. La responsabilita' e' di chi ha il possesso di questi oggetti, ovvero chi li ha creati.
Quindi in generale la mia risposta e' no: non e' chi possiede la collezione che deve distruggere gli oggetti contenuti, ma chi ha creato gli oggetti stessi. Edit. Correzione: se per "esiste solo nella collezione" implichi che chi possiede la collezione ha creato anche l'oggetto si', e' la stessa cosa che ho detto io ![]()
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA Ultima modifica di fek : 20-01-2008 alle 11:50. |
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11782
|
Quote:
![]()
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:08.