Referenz auf Map-Value und erase



  • Hi zusammen

    wäre das hier undefined behaviour oder funktioniert das zuverlässig?

    std::unordered_map<std::string, std::string> MyMap;
    MyMap[ "key" ] = "value";
    
    auto  it_findmyvalue = MyMap.find( "key" );
    if ( it_findmyvalue != MyMap.end() )
    {
        std::string &Reference = it_findmyvalue ->second; 
        // do stuff
        MyMap.erase( it_findmyvalue  );
    }
    

    Im Grunde zerstöre ich mit "erase" das Objekt auf das die Referenz abzielt.
    Da die Referenz aber direkt darauf durch das Ende des Blocks auch verfällt, könnte das doch funktionieren, oder?
    Wird beim Entsorgen der Referenz noch auf das referenzierte Objekt zugegriffen oder nicht?


  • Mod

    Problemlos möglich. Aber aus anderen Gründen als du denkst. Die Sichtbarkeit oder Lebenszeit der Referenz hat hier keine tiefere Bedeutung. Du hast vermutlich falsche Vorstellungen, was eine Referenz ist. Denk dir das nicht als irgendein komplexes Objekt im Programm, sondern eher als Aliasname im Quellcode. Oder wenn du unbedingt eine programmtechnische Vorstellung brauchst, denk es dir wie einen nicht-besitzenden Zeiger.



  • super danke. Ich hatte das gehofft. Auch wenn eine Referenz nicht unbedingt nötig wäre, so arbeite ich lieber damit, als ständig mit "it_findmyvalue->second". Sieht im Quellcode einfach besser aus.


Log in to reply