shared_ptr und std::move



  • Wenn ich einen shared_ptr auf eine Variable an einen Konstruktor (oder auch an eine Methode) übergebe und diese dann per move in eine Membervariable verschiebe

    PdxManager::PdxManager(shared_ptr<MappingVarManager> mappingVarManager)
        : _mappingVarManager(std::move(mappingVarManager))
    {    
    }
    

    sagt mir resharper ich soll doch besser die Variable (also den shared_ptr auf die Variable) per const reference übergeben.

    Wenn ich aber doch die Referenz übergebe wird dann beim move das Objekt vom Aufrufer "weg gemovt". Das möchte ich ja nicht. Der Aufrufer benötigt das Objekt weiterhin.

    Oder habe ich da noch was nicht ganz verstanden?



  • @booster sagte in shared_ptr und std::move:

    Der Aufrufer benötigt das Objekt weiterhin.

    Dann muss sowieso einmal kopiert werden, ob nun bei der Parameterübergabe oder beim Initialisieren von _mappingVarManager ist doch wuppe.



  • @booster

    Eigentlich genau richtig, wie du es machst.
    shared_ptr als copy-parameter heisst 'share ownership':

    Gotw


Anmelden zum Antworten