diciamo che avete una mappa non ordinata della variabile di istanza che mappa un intero ad un oggetto (come un oggetto di tempo). se si sovrascrive quella mappa e si utilizza la sovrascrittura standard come map_[5] = time.now () in una funzione di classe, dove è creato quell'oggetto time.now? è nella pila dove la funzione era e così quando la funzione va fuori portata che il tempo nella mappa va fuori portata? o è con gli oggetti di classe in modo da poter controllare l'ora più tardi?
in sostanza, se si sta scrivendo a una mappa di campo istanza in una funzione e si sono memorizzati gli oggetti che si desidera accedere in seguito si può utilizzare oggetti normali o avete bisogno di utilizzare puntatori?
non ho usato il C ++ per un po 'e sto cercando di riimparare le sfumature e questo mi confonde. grazie!!
En title : C++ map[]= memory ramifications
la durata degli oggetti contenuti in un
std::map
ostd::unordered_map
è la durata della mappa. tieni presente che l'oggetto assegnato ad un elemento di una mappa non è lo stesso oggetto contenuto nella mappa.per esempio, in questo frammento:
in realtà sono coinvolti almeno due oggetti
time_point
:now
my_map[10]
la linea
my_map[10] = now
in realtà fa un po ':my_map
per la chiave10
,map::operator[]
default-costruisce un nuovo oggettotime_point
, lo inserisce inmy_map
, e gli restituisce un riferimento.time_point
viene chiamata e passato un riferimento anow
.time_point::operator=
regola lo stato deltime_point
che è stato chiamato a riflettere lo stato deltime_point
passato ad esso.è l'oggetto
time_point
che è memorizzato nella mappa la cui durata è controllata dalla mappa.now
è una variabile locale, e come tale la sua vita finirà alla fine della portata in cui è stato dichiarato.per esempio, data la seguente definizione di classe:
la seguente definizione di
do_a_thing
non è valida:mentre il seguente è valido: