Wenn ich einen binären Baum habe, wo jeder Knoten nur Zeiger auf Kinderknoten enthält, dann funktioniert sehr gut. Wenn ich möchte, dass jeder Knoten einen Elternzeiger hat, dann ist die Situation nicht so nett, da ein Knoten möglicherweise drei Zeiger hat: Binary Tree with parent pointerSmart Pointer für Binärbaum
Was kann ich in diesem Fall tun? Ich kann für alles verwenden, aber mir wurde gesagt, dass es kein gutes Design ist, da ich Zyklen bekommen kann. Wenn ich eine weak_ptr
für den Elternzeiger verwenden würde, welche shared_ptr
erstelle ich diese weak_ptr
aus?
Ich fange an zu denken, dass einfache integrierte Zeiger möglicherweise besser für dieses Problem geeignet sind. Jeder Rat wird sehr geschätzt.
Es ist nichts falsch mit einem Paar 'std :: unique_ptr's und einem ** nicht-besitzen ** row-Zeiger auf das Elternteil. – StoryTeller
In den meisten Fällen sollten Sie die Smart Pointer nicht als einfache selbstlöschende Pointer, sondern als Ownership Primitive sehen.Kann eine "Ressource" nur einen einzigen Besitzer (mit 'std :: unique_ptr') oder mehrere gleichzeitige Besitzer (mit' std :: shared_ptr') haben? –
Vielleicht bin ich alleine hier, aber die ganze Idee der Verwendung von Smart Pointer innerhalb der btree-Implementierung ist nicht die beste. Ich sehe kein Problem mit rohen Zeigern innerhalb einer konkreten Klasse, die Sie kontrollieren können. Auch das Konzept "Besitzer sein" ist nicht einfach (imho gibt es mehr als eine "intuitive" Sichtweise) an einen Baum gebunden. Wenn Sie später einige Graph-Operationen implementieren möchten, wird es wahrscheinlich ein Chaos werden. –