Ich bin neu in C++ Umfang und irgendwie verwirrt über die Lebensdauer eines std::string
, wenn es in eine std::map
eingefügt wird.Umfang der std :: string wenn in Karte
Zum Beispiel:
void loadMap(std::map<string, int> &myMap)
{
int num = rand();
myMap[to_string(num) + "_xyz"] = num;
}
void main(int argc, char** argv)
{
std::map<string, int> myMap;
loadMap(myMap);
//Is the entry I just added to the map in loadMap still safe in there?
//i.e., is the key, which is an std::string, still around?
//Or its lifetime's ended?
}
Ich habe einige Tests und es SCHEINT in Ordnung zu sein, aber ich bin nicht sicher, ob es immer der Fall sein wird. Vielleicht hatte ich nur Glück, dass die Erinnerung, wo die std :: string nicht berührt wurde.
Die Lebensdauer eines Karteninhalts entspricht der Lebensdauer der Karte. – molbdnilo
@Treycos Ich verstehe, dass 'loadMap' die Karte DIREKT geändert hat, weil ich als Referenz weitergegeben habe, ABER was, wenn die Lebensdauer der Zeichenfolge abgelaufen ist? – 0x56794E
Die Antwort ist über – Treycos