boost::shared_ptr in std::map



  • Wenn man sowas will, kann man doch einfach gleich das Objekt statt dem Poniter nehmen.



  • Decimad schrieb:

    Sonderlich oft kann ich mir dafür aber keinen Nutzen vorstellen...

    fragenbooster schrieb:

    Wenn man sowas will, kann man doch einfach gleich das Objekt statt dem Poniter nehmen.

    Nein, so ein Pointer hat schon seine Vorteile. Zum einen muss bei seiner Definition der Template-Typ nicht vollständig bekannt sein, was ihn vorteilhaft für Klassen macht, von denen man im Header nur eine Vorwärtsdeklaration hat und den Typen erst in der Implementierungsdatei kennt.

    Zum anderen sind damit Dinge wie swap() einfacher und performanter.



  • Naja. Ich muss Decimad recht geben, dass man es nicht sonderlich oft braucht. Meistens will man ja immer dasselbe Objekt ansprechen und weitergeben. Ansonsten kann man oftmals die Ressourcen ja eh nicht selbst kopieren und muss sowieso auf spezielle Funktionen zurückgreifen ala Clone, oder Copy..



  • Nexus schrieb:

    Zum einen muss bei seiner Definition der Template-Typ nicht vollständig bekannt sein, was ihn vorteilhaft für Klassen macht, von denen man im Header nur eine Vorwärtsdeklaration hat und den Typen erst in der Implementierungsdatei kennt.

    Sowas sollte mit shared_ptr aber auch gehen.



  • Braunstein schrieb:

    Sowas sollte mit shared_ptr aber auch gehen.

    Ja, aber shared_ptr besitzt keine Kopiersemantik für das verwaltete Objekt. Das Objekt wird unter den einzelnen Smart Pointers aufgeteilt.



  • Das weiß ich, aber darum ging es mir jetzt nicht.



  • Wenn du schon boost benutzt, würde ich mir mal an deiner Stelle boost::ptr_map<> anschauen: http://www.boost.org/doc/libs/1_37_0/libs/ptr_container/doc/tutorial.html#associative-containers



  • Braunstein schrieb:

    Das weiß ich, aber darum ging es mir jetzt nicht.

    Hm? Du hast dich aber schon auf meinen Beitrag bezogen, oder?

    Naja, wie auch immer. Objekt-kopierende Smart Pointer werden zwar selten gebraucht, aber nur weil sie weder in der Standardbibliothek noch in Boost vorkommen, muss man ihnen nicht gleich jede Daseinsberechtigung absprechen...



  • Nexus schrieb:

    Naja, wie auch immer. Objekt-kopierende Smart Pointer werden zwar selten gebraucht, aber nur weil sie weder in der Standardbibliothek noch in Boost vorkommen, muss man ihnen nicht gleich jede Daseinsberechtigung absprechen...

    Das hat auch niemand. Es wurde lediglich gesagt, dass man das selten braucht.. 🙄



  • drakon schrieb:

    Das hat auch niemand. Es wurde lediglich gesagt, dass man das selten braucht.. 🙄

    Doch, fragenbooster. 😉

    Nein, stimmt schon, war vielleicht etwas übertrieben von mir. Egal, wir sind uns glaube ich alle einig... 🙂


Anmelden zum Antworten