Iterator einem unique_ptr<> zuweisen

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
PietCN
Beiträge: 13
Registriert: Sa Jan 16, 2016 10:49 pm

Iterator einem unique_ptr<> zuweisen

Beitrag von PietCN » Do Nov 10, 2016 3:50 pm

Hallo,
wie mal jemand bei Microsoft sagt: "Ich weiß das es funktioniert, aber nicht warum...."

Kurze Einleitung: Ich habe mir in einem Vector ein Element gesucht, welches als Iterator mir zur Verfügung gestellt wird:
(Hintergund: Bereitstellung einer Methode um in einer Datenstruktur ein Element zu entfernen und das entfernte Element mir dann noch zur Verfügung zu stellen)

Code: Alles auswählen

using Ptr = std::unique_ptr<Node>;   //unique_ptr auf die Klasse Node

Ptr detachChild(const Node& node) {
  auto found = std::find_if(
                                   mChildren.begin(), 
                                   mChlidren.end(), 
                                   [&] (Ptr p)
                                   {
                                       return p.get() == &node;
                                   });

  mChildren.erase(found);
  ...
}
Soweit so gut, nun habe ich ja ein Iterator der in dem Vector mChildren auf mein gesuchtes Element zeigt (Überprüfungen ob das passt lass ich jetzt hier bewusst außen vor).
Element wird aus dem Vector entfernt ... und nun will ich ja noch einen Zugriff darauf haben, ergo muss den Iterator irgendwie wieder zu einem unique_ptr "wandlen"

Code: Alles auswählen

{
 ...
  Ptr result = std::move(*found);
  return result;
}
So warum muss ich found jetzt noch dereferenzieren? Der Iterator ist doch an sich ein Zeiger auf ein Element und der unique_ptr ist doch auch ein "Zeiger".
Oder Funktioniert der Move-Operator nicht auf Zeiger / Iteratoren / Pointer(unique oder shared) ? Im Netz und bei meinen Referenzen habe ich da leider keine genaue Lösung gefunden.

Kann ja auch sein das das einfach eine Operation ist, die halt so ist und ich sie nun so hinehmen muss :D

Mit freundlichen Grüßen

PietCN
Beiträge: 13
Registriert: Sa Jan 16, 2016 10:49 pm

Re: Iterator einem unique_ptr<> zuweisen

Beitrag von PietCN » Do Nov 10, 2016 4:02 pm

Ach verdammt, einfach mal 10 Minuten länger nachdenken.

Der Iterator ist ja ein Pointer auf das Element, welches wieder ein Pointer auf ein Instanz X ist.
Damit ich dann den :D Inhalt :D des Iterators dann zurück geben will muss ich den logischerweise dereferenzieren.
Wuhu es lebe die Intelligenz :D

Antworten