Wieso geht diese Zuweisung?
-
Abend, ich habe eine Frage zu folgendem Code:
map<string, weak_ptr<Foo>> mMap; ... shared_ptr<Foo> sharedPtr; mMap["test"] = sharedPtr;Wieso geht das? Kann mir einer den genauen Ablauf skizzieren, der da stattfindet, also welche Methoden/Operatoren in welcher Reihenfolge aufgerufen werden. Erst map::operator[], dann operators= etc.
Danke!
-
Wieso sollte sie nicht gehen?
-
MapFrage schrieb:
Danke!
Mach dir doch einfach mal zwei Klassen, die genau diese Operatoren überladen und guck wie die Ausgabe aussieht.

-
Also, ich nehme an, in weak_ptr gibt es sowas:
weak_ptr& operator=(const shared_ptr&);Oder es sind beides Kind-klassen, und es gibt einen polymorphen Zuweisungsoperator...
-
Jup:
template<class Y> weak_ptr & operator=(shared_ptr<Y> const & r);http://www.boost.org/doc/libs/1_42_0/libs/smart_ptr/weak_ptr.htm#Members
-
MapFrage schrieb:
Kann mir einer den genauen Ablauf skizzieren, der da stattfindet, also welche Methoden/Operatoren in welcher Reihenfolge aufgerufen werden. Erst map::operator[], dann operators= etc.
Du könntest Dir einen Debugger schnappen und damit Schritt für Schritt in dem Code der aufgerufen wird durchgehen. Dann kannst Du das selber, live und in Farbe miterleben. Verglichen mit einer spröden Antwort eines gelangweilten Forenmitglieds ein unvergessliches und didaktisch nicht zu übertreffendes Erlebnis!
Aber im Prinzip liegst Du mit deiner Vermutung schon ganz richtig. Es wird der [] operator mit dem Argument "test" (für das vorher noch der string konstruktor aufgerufen wurde) aufgerufen, der mittels lower_bound o.ä. nach dem Schlüssel sucht. Falls er an der gefundenen Stelle nicht vorhanden ist, wird er dort angelegt und eine Referenz auf das ebenfalls dort angelegte Element vom Typ weak_ptr<Foo> zurückgeben. Danach wird dann der schon benannte =operator von weak_ptr aufgerufen.
-
Hacker schrieb:
Oder es sind beides Kind-klassen, und es gibt einen polymorphen Zuweisungsoperator...
Kommt sowas tatsächlich in Produktivcode vor?
-
Edit: Produktivcode <=> Programmcode, der für die Verwendung auf eingebetteten Systemen, insbesondere in Echtzeitumgebungen, geeignet ist oder? Google hilft nicht...