shared_ptr als const reference



  • Hallo

    Habe eine Klasse deren Konstruktor einen shared_ptr übernimmt und via move weiterleitet.

    MyClass(shared_ptr<SomeOtherClass> otherClass)
        : _myMember(std::move(otherClass)) { }
    

    Wäre es nun ratsam otherClass per const reference zu übergeben. Eher nicht oder? Ich möchte ja per shared_ptr die Besitzrechte teilen.



  • Hier gut und ausführlich:
    https://herbsutter.com/2013/06/05/gotw-91-solution-smart-pointer-parameters/
    Auszug:
    (e) If the local scope is not the final destination, just std::move the shared_ptr onward to wherever it needs to go.

    Beim Konstruktor gilt sowieso: per value und dann move.
    (EDIT: Wenn man damit einen member intialisieren möchte)

    EDIT 2: Kleiner Warnhinweis, pass auf dass sich die Klasse durch den shared_ptr nicht selbst hält.



  • @5cript sagte in shared_ptr als const reference:

    Hier gut und ausführlich:
    https://herbsutter.com/2013/06/05/gotw-91-solution-smart-pointer-parameters/
    Auszug:
    (e) If the local scope is not the final destination, just std::move the shared_ptr onward to wherever it needs to go.

    Beim Konstruktor gilt sowieso: per value und dann move.
    (EDIT: Wenn man damit einen member intialisieren möchte)

    EDIT 2: Kleiner Warnhinweis, pass auf dass sich die Klasse durch den shared_ptr nicht selbst hält.

    Danke für den Link. Die Serie kannte ich noch gar nicht! Definitiv lesenswert und auch kein abgehobenes Gewäsch sondern alles Probleme aus der Praxis.


  • Mod

    Wenn Du eine const-Referenz nimmst, gibt es jedesmal eine Kopie. Bei deiner Variante gibt es nur moves falls dem Konstruktor ein rvalue gegeben wird.



  • Hi.

    Danke euch für eure Antwort und auch für den Link. Dann passt in meinem Fall die übergabe per value.
    Mein Resharper meldet hier immer übergabe per const reference sein die bessere Wahl.


Log in to reply