Die richtige Art und Weise der übertragung von Eigentum an einen std::vector< std::unique_ptr< int> > zu einer Klasse gebaut

Was ist die richtige Art und Weise der übertragung von Eigentum an einem std::vector<unique_ptr<int> > zu einer Klasse erstellt?

Unten ist ein code-Darstellung, was ich tun möchte. Ich weiß, es ist nicht korrekt (nicht kompiliert) und gegen "Einzigartigkeit" ob ich gehe in den Vektor an den Konstruktor durch einen Wert oder Verweis. Ich möchte, dass Foo der neue Besitzer des Vektors, und wollen, dass die aufrufende Funktion zu verzichten, den Besitz. Muss ich den Konstruktor zu nehmen std::unique_ptr<std::vector<std::unique_ptr<int> > > zu tun?

Foo.h

class Foo
{
public:
  Foo(vector<std::unique_ptr<int> > vecOfIntPtrsOwnedByCaller);

private:
  vector<std::unique_ptr<int> > _vecOfIntPtrsOwnedByFoo;
}

Foo.cpp

Foo::Foo(std::vector<std::unique_ptr< int> > vecOfIntPtrsOwnedByCaller)
{
    _vecOfIntPtrsOwnedByFoo = vecOfIntPtrsOwnedByCaller;
}

Jede Hilfe wäre sehr geschätzt - ich habe Sie durchforstet das Netz auf der Suche für den richtigen Weg, dies zu tun. Danke!

  • std::vector<std::unique_ptr<int>> erfordert entweder eine vorübergehende oder dem Anrufer zu verwenden std::move auf Ihre eigenen Vektor -, denn es kann nicht einfach kopiert werden. Wenn Sie möchten, um es wirklich explizit berücksichtigen std::vector<...>&&. Danach bewegen Sie in Ihrem Mitglieder - (in der member-Initialisierungen!) mit std::move.
  • Wollen Sie den Vektor eindeutig im Besitz, oder die darin enthaltenen Elemente?
  • Helligkeit Rennen im Orbit - Beide.
  • Xeo - vielen Dank für Ihre Antwort. Ich bin nur beim Lesen auf rvalue-Referenzen jetzt. Wenn ich Sie richtig verstanden habe, wird der Konstruktor eine rvalue Referenz auf einen vector und Mach _vecOfIntPtrsOwnedByFoo(std::move(vecOfIntPtrsRvalRefence)). Ich bin nicht ganz klar, wie man den Vektor übergeben, in den Konstruktor ein temporäres/rvalue. Die vector-ich bin versucht, übergeben Sie dem Konstruktor ist eine Globale variable von einer anderen Klasse.
InformationsquelleAutor Jen | 2013-08-16
Schreibe einen Kommentar