494 Stimmen

Wie übergebe ich ein unique_ptr-Argument an einen Konstruktor oder eine Funktion?

Ich bin neu in der Move-Semantik in C++11 und ich weiß nicht sehr gut, wie zu behandeln unique_ptr Parameter in Konstruktoren oder Funktionen. Betrachten Sie diese Klasse, die sich selbst referenziert:

#include <memory>

class Base
{
  public:

    typedef unique_ptr<Base> UPtr;

    Base(){}
    Base(Base::UPtr n):next(std::move(n)){}

    virtual ~Base(){}

    void setNext(Base::UPtr n)
    {
      next = std::move(n);
    }

  protected :

    Base::UPtr next;

};

Sollte ich die Funktionen so schreiben? unique_ptr Argumente?

Und muss ich die std::move im aufrufenden Code?

Base::UPtr b1;
Base::UPtr b2(new Base());

b1->setNext(b2); //should I write b1->setNext(std::move(b2)); instead?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X