Entsprechende Verwendung von shared_ptr?

8

Ich habe keine Erfahrung mit shared_ptr<> . Ich frage mich, ob das Folgende ein geeigneter Anwendungsfall ist und ob es sinnvoll ist, shared_ptr<> an den Benutzer zurückzugeben.

Ich habe eine graphartige Struktur mit mehreren Verbindungen zwischen den Knoten. Während des Traversierens des Graphen wird jedem Knoten ein Wert zugewiesen (berechnet von verbundenen Knoten), und ich möchte, dass der Benutzer leicht auf den Wert zugreifen kann. Das Ganze sieht (stark vereinfacht) so aus:

%Vor%

und der Benutzer ruft:

%Vor%

Dies hat den Vorteil, dass der Benutzer direkten Zugriff auf die Knoten hat, die ihm wichtig sind (Abhängigkeiten sind oft uninteressant). Aber ich bin mir nicht 100% sicher, ob das eine gute Idee ist.

Danke für Ihre Eingabe!

Bearbeiten: Es gibt keine zirkulären Abhängigkeiten.

    
bbtrb 15.04.2011, 02:27
quelle

2 Antworten

10

shared_ptr ist in erster Linie nützlich für Zeiten, in denen ein Objekt keinen eindeutigen Eigentümer hat (oder seinen Besitzer überlebt), so dass es keinen offensichtlichen Ort gibt, es zu zerstören. Der shared_ptr wird im Wesentlichen zum Eigentümer und das Objekt wird zerstört, wenn der letzte shared_ptr außerhalb des Bereichs liegt.

Wenn Sie einen eindeutigen Eigentümer haben, wie Ihre Pool -Klasse, und die Node -Objekte nicht mehr benötigen, um die besitzende Pool zu überstehen, dann brauchen Sie wirklich nicht unbedingt ein shared_ptr . Sie können nur die Objekte im Destruktor des Besitzers zerstören.

    
Head Geek 15.04.2011, 02:47
quelle
3

Ich biete gerne Zugang zu anderen über weak_ptr, Sie können einen weak_ptr & lt; Knoten & gt; direkt von einem shared_ptr & lt; Knoten & gt;.

Der Benutzer würde im Allgemeinen einen weak_ptr aus dem Pool abrufen und dann einen shared_ptr & lt; Knoten & gt; vom schwachen_ptr & lt; Knoten & gt; .lock ().

Dies vermittelt dem Benutzer, dass sie keine Eigentumsrechte haben und sollte darauf achten, das Schloss nicht länger als nötig zu halten - oder zumindest tut es mir:)

    
Vusak 15.04.2011 02:37
quelle

Tags und Links