c ++ mappa [] = ramificazioni della memoria

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

1 Comments:

  1. la durata degli oggetti contenuti in un std::map o std::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:

    std::map<int, std::chrono::system_clock::time_point> my_map;
    auto now = std::chrono::system_clock::now();
    my_map[10] = now;
    

    in realtà sono coinvolti almeno due oggetti time_point:

    1. now
    2. my_map[10]

    la linea my_map[10] = now in realtà fa un po ':

    1. poiché nessun valore esiste in my_map per la chiave 10, map::operator[] default-costruisce un nuovo oggetto time_point, lo inserisce in my_map, e gli restituisce un riferimento.
    2. la funzione operatore di assegnazione dell'oggetto restituito time_point viene chiamata e passato un riferimento a now.
    3. time_point::operator= regola lo stato del time_point che è stato chiamato a riflettere lo stato del time_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:

    class Foo {
    public:
        const std::chrono::system_clock::time_point& do_a_thing(int i);
    private:
        std::map<int, std::chrono::system_clock::time_point> my_map;
    };
    

    la seguente definizione di do_a_thing non è valida:

    const std::chrono::system_clock::time_point& do_a_thing(int i) {
        auto now = std::chrono::system_clock::now();
        my_map[i] = now;
        return now;  // whoops, returning a reference to a function local
    }
    

    mentre il seguente è valido:

    const std::chrono::system_clock::time_point& do_a_thing(int i) {
        auto now = std::chrono::system_clock::now();
        my_map[i] = now;
        return my_map[i]; // OK, the lifetime of my_map[i] is the same as my_map
    }
    

More similar articles:

  • problema di allineamento della memoria con std:: mappa su Linux
  • STD:: mappa, riferimenti, puntatori e allocazione della memoria
  • allocazione della memoria durante l'inserimento in una mappa
  • mappa e multimap: differenze di utilizzo/gestione della memoria?
  • dimensione della mappa di memoria più grande?
  • c ++ Migliorare il file obj della mappa della memoria
  • come visualizzare le informazioni sulla mappa della memoria di Linux in C?
  • come ottenere la dimensione della mappa sulla memoria (RAM)
  • usando stringa vs byte [] come valore, Utilizzo della memoria nella mappa
  • c ++: piccola perdita di memoria con std:: mappa
  • memoria efficiente std:: mappa alternativa
  • utilizzo della memoria della mappa hash
  • come può la mia applicazione Android eseguire la scansione della propria mappa di memoria per note parole chiave male come "Xposed" o "Frida"?
  • perdita di memoria con prese e mappa
  • un'alternativa alla mappa della memoria fisica allo spazio dell'indirizzo virtuale dell'utente senza usare la chiamata "mmap"
  • dove si trovano i registri R0 e R1 nella mappa della memoria?
  • studiare un codice semplicistico smontaggio uscita e mappa di memoria
  • come posso evitare una perdita di memoria quando inizializza una mappa nel costruttore di una classe?
  • allocazione memoria per una mappa con un numero fisso di inserzioni
  • c # accesso al file della mappa di memoria
  • mappa della memoria di GridView
  • cosa significa questa mappa di memoria quando compilo il mio programma?
  • è valgrind pazzo o è questo è un vero e proprio std mappa iterator perdita di memoria?
  • una confusione sulla memoria datanode si verifica quando diverse attività della mappa sono in parallelo sullo stesso datanote
  • inserimento della mappa C ++
  • esplosione di memoria con std:: mappa
  • Qt - aggiungere elementi alle perdite di memoria e mappa
  • allocazione della memoria per la mappa hash
  • possibile problema di memoria utilizzando una mappa_non ordinata con un vettore come oggetto
  • Go: ampio utilizzo della memoria quando si riutilizzano le chiavi della mappa