Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Con velocità teoriche fino a 11 Gbps, gestione tramite app intelligente e protezione avanzata dei dispositivi, Roamii BE Pro porta il Wi‑Fi 7 tri‑band nelle abitazioni più esigenti. Un sistema Wi-Fi Mesh proposto da MSI allo scopo di garantire agli utenti una rete fluida e continua capace di sostenere streaming 8K, gaming competitivo e le applicazioni moderne più esigenti in termini di banda
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Mate X7 rinnova la sfida nel segmento dei pieghevoli premium puntando su un design ancora più sottile e resistente, unito al ritorno dei processori proprietari della serie Kirin. L'assenza dei servizi Google e del 5G pesa ancora sull'esperienza utente, ma il comparto fotografico e la qualità costruttiva cercano di compensare queste mancanze strutturali con soluzioni ingegneristiche di altissimo livello
Nioh 3: souls-like punitivo e Action RPG
Nioh 3: souls-like punitivo e Action RPG
Nioh 3 aggiorna la formula Team NINJA con aree esplorabili più grandi, due stili di combattimento intercambiabili al volo (Samurai e Ninja) e un sistema di progressione pieno di attività, basi nemiche e sfide legate al Crogiolo. La recensione entra nel dettaglio su combattimento, build, progressione e requisiti PC
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 13-01-2009, 18:17   #1
robs05
Member
 
Iscritto dal: Jan 2007
Messaggi: 112
[C++]: Differenza tra list<Item *> e list<Item>

Salve,

vorrei chiarire un dubbio che differenza c'è tra list<Item *> e list<Item>?

Provo a dare una risposta:

In effetti list<Item> lista dichiaro una lista che può contenere istanze della classe Item. Posso inserire elementi con il metodo lista.push_back()
es.

Codice:
list<Item> lista;
Item uno(1);
Item due(2);
lista.push_back(uno);
lista.push_back(due);

list<Item>::iterator it = lista.begin();
for(; it != lista.end();it++)
     cout << it->getX() << endl;
e questo codice gira.

Invece con list<Item *> lista dichiaro un contenitore che può contenere puntatori a istanze di quella classe quindi

Codice:
list<Item *> lista;
Item *uno = new Item(1);
Item due(2);
lista.push_back(uno);
lista.push_back(&due);

list<Item *>::iterator it = lista.begin();
for(; it != lista.end();it++)
     cout << (*it)->getX() << endl;
e questo codice anche gira!

La mie domande sono:

le affermaizoni che ho fatto sono giuste?
se si qual'è la differenza nell'usare la prima metodologia oppure la seconda?
quando conviene usare la prima o la seconda?
sono scelte implementative? si è liberi di fare come crede o sono legate a qualcosa?

grazie mille
robs05 è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2009, 18:58   #2
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Item due(2);
lista.push_back(&due);

Questa cosa perde senso se lista esiste anche al di fuori dello scope di due.
Infatti due al di fuori del suo blocco di visibilità può essere anche stata deallocata e sostituita da altri dati. Di conseguenza il puntatore non è più valido.

Il primo tipo di lista usa infatti il costruttore di copia per memorizzare i dati all'interno della lista.

Il secondo tipo è più adatto ad oggetti allocati dinamicamente. Nota che prima di distruggere l'oggetto list devi anche deallocare tutte gli elementi al suo interno.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2009, 19:22   #3
robs05
Member
 
Iscritto dal: Jan 2007
Messaggi: 112
invece cosi:

Codice:
list<Item *> lista;
Item *uno = new Item(1);
Item *due = new Item(2);
lista.push_back(uno);
lista.push_back(due);

list<Item *>::iterator it = lista.begin();
for(; it != lista.end();it++)
     cout << (*it)->getX() << endl;
andrebbe bene..... giusto?

invece poi questa scrittura?

Codice:
    list<Item> lista;
    Item *uno = new Item(1);
    Item due(2);
    lista.push_back(*uno);
    lista.push_back(due);

    list<Item>::iterator it = lista.begin();
    for(; it != lista.end();it++)
        cout << it->getX() << endl;
ha senso?
robs05 è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2009, 19:27   #4
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Vanno bene entrambi. Nel primo ovviamente non devi deallocare uno e due, ma devi deallocare gli elementi contenuti nella lista quando la svuoti.
cionci è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo M...
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti Test in super anteprima di Navimow i220 LiDAR: i...
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto Dark Perk Ergo e Sym provati tra wireless, softw...
Dongfeng sbarca 'a casa loro': il nuovo ...
BYD ATTO 3 EVO: 3,9 secondi sullo 0-100 ...
Horizon 3 potrebbe arrivare tra 3-5 anni...
Spostare il 40% della produzione in USA?...
Project Panama: ecco come Anthropic ha d...
MrBeast entra nel fintech: Beast Industr...
Arrivano i nuovi server Bare Metal 2026 ...
Stop alla distribuzione dei driver di st...
Serie TV God of War: scelto anche l'atto...
Riot Games dimezza il team di 2XKO dopo ...
FRITZ! in super offerta su Amazon: ripet...
L'AI doveva farci lavorare meno: e se st...
DREAME X50 Ultra Complete a 899€ su Amaz...
Rimodulazione TIM: aumenti fino a 2,99 e...
Amazon sblocca i prezzi con coupon e sco...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 14:27.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v