009
19.07.2006, 11:38 Uhr
RHBaum
|
Zitat: |
enn ich ein objekt in die liste aufnehmen, wird das dann in die liste kopiert so wie beim vector?
|
Ja
der clou ist nur drann, das die liste nich das blanke new nimmt sondern nen eigenen allokator, dar auf das massenweise erzeugen von objekten gleichen types spezialisiert ist, verwendet.
Soprich bei 1000 elementen wuerdest du bei list<Kontakt*> 1000 mal new kontakt; oder sowas aufrufen und du darfst deine liste ned beliebig loeschen sondern musst immer delete aufrufen
bei ner list<Kontakt> wuerdest du die allokation den allokator ueberlassen, musst aber dafuer bei jedem einfuegen ne kopie machen (CopyConstructor ! ) Das kann unter Umstanden sogar schneller sein .... und du kannst die liste auch wegwerfen ohne probleme.
Bei sachen wo die kopie trivial ist, sollt man das unbedingt machen ...
Oftmals hat man den Fall, dass man nichttrivial zu kopierende objecte hat, die man mehrfach in unterschiedlichen containern referenzieren darf.
Da bietet sich dann sowas wie nen manager implementiert mit ner <list> an. Also erstmal element in liste einfugen, dann hat man das ding da im container existieren, mit ner geeigneten operatorion sich nen zeiger auf das element in der liste holen, und den zeiger dann als referenz in den anderen containern verwenden. liste eigenet sich deshalb, weil da die elemente nie umsortiert werden, egal ob man nen nachbarn loescht oder was auch immer .... laso die zeiger aufn element gueltig bleiben bis du die liste loeschst oder das element aus der liste rausholst
Hat den vorteil das keine losen mit new erzeugten objekte "rumfliegen" und man das delete nich mehr braucht. Man muss halt nur aufpassen, das die liste solange lebt wie auf die referenzen zugegriffen wird.
Ciao .. Dieser Post wurde am 19.07.2006 um 11:41 Uhr von RHBaum editiert. |