std::unique_ptr Versuch zum Verweis auf eine gelöschte Funktion

Ich habe auf Unity schon eine ganze Weile und kam zurück, um einige C++ unter Verwendung von Visual Studio 2015. Ich kam in dieser Klasse definition

class A
{
public:
  A();
  virtual ~A();
  A(const A&) = delete;
  A& operator=(const A&) = delete;

private:
  
}

Diese Klasse wird dynamisch zugewiesen, wie die folgenden:

ObjPtr obj = ObjPtr(new A());

wo ObjPtr ist eine Art definiert und wie folgt aussieht:

typedef std::unique_ptr<A> objPtr;

hinzufügen und diese erstellte Objekte verwenden, um eine std::vector<ObjPtr> mit std::move. An einer Stelle, die ich brauche, um eine Schleife durch die Liste der Objekte, und wenn ich etwas finden, das erfüllt meine Kriterien, eine Kopie davon zu halten.

ObjPtr keep;

for(auto& object : GetObjectList() )
{
  if(/*check if its the object I want*/)
  {
    keep = object;
  }
}

Wo GetObjectList gibt eine const std::vector<ObjPtr>&.

Aber ich bin immer ein "Versuch zum Verweis auf eine gelöschte Funktion". Ich habe einige googeln und versucht zu entfernen, die = delete Teil und sagte sogar die 2 Zeilen aus. Ich habe sogar versucht zu tun

ObjPtr keep = std::move(object);

Aber ich bin noch immer die Funktion gelöscht Fehler. Kann jemand sehen, was ich falsch mache oder zeigen Sie mir einige Ressourcen, die helfen können?

  • Was ist der Typ von ObjectList?
  • Meinen Beitrag aktualisiert!
  • Sind Sie sicher, dass ObjectList ist nicht const?
  • Nicht reproduzieren. Stellen Sie sicher, dass auch Sie verwenden keep = std::move(object);.
  • keep = std::move(object); verlassen würde, einen Toten Zeiger im vector.
  • Aktualisiert die post. Ja, es ist ein const
  • "einzigartig" ptr
  • Gut es gibt Sie. Sie können sich nicht bewegen, aus der eine Konstante eindeutige Zeiger. Auch, wie viele andere sagen, das ist nicht, wie unique_ptr beabsichtigt wurde, verwendet werden.
  • Warum sollte es ein problem sein? Die unique_ptr move-Konstruktor tut seine Arbeit. Vielleicht verstehe ich nicht, was Sie sagen.
  • Was würde das lassen, in den Vektor?
  • Ein unique_ptr verschoben wurde, aus. Das Eigentum übertragen wurde außerhalb des Vektors, ist es nicht?
  • Recht, das scheint nicht das zu sein, was der OP will. Es gibt keine Beweise, er will den Vektor zu verlieren Besitz des Objekts.
  • ein Objekt in einem gültigen, aber unbekannter Zustand? (17.6.5.15). Das ist, warum ich sagte, dass ich wahrscheinlich nicht verstehen, was genau wollen Sie sagen. IMO ist es völlig in Ordnung zu sinken unique_ptr's in Behältern und verschieben Sie Sie zurück, solange Sie wissen, was Sie tun. Ahh OK ich hab jetzt das Ende Ihres Kommentars. Ja, ich bin einverstanden. Für einen moment dachte ich, ich kann gelernt haben, etwas eklatant falsch unique_ptr ist, und dass Sie sich nicht bewegen kann Sie in Behälter. Aber jetzt ist es klar, was Sie meinte.

InformationsquelleAutor dwnenr | 2015-11-21
Schreibe einen Kommentar