Sollte ich einen intelligenten Zeiger verwenden?

8

Ich habe eine Klasse wie die folgende:

%Vor%

Soll ich einen intelligenten Zeiger anstelle von rohen Zeigern verwenden? Warum? Wenn ja, welche Art von Smart Pointer?

    
gliderkite 02.07.2012, 09:40
quelle

3 Antworten

17

Verwenden Sie immer einen intelligenten Zeiger, wo immer Sie Ressourcen besitzen (Speicher, Dateien usw.). Sie manuell zu besitzen, ist extrem fehleranfällig und verletzt viele gute Praktiken, wie TROCKEN .

Welche zu verwenden ist hängt davon ab, welche Besitz Semantik Sie benötigen. unique_ptr eignet sich am besten für Einzelbesitz und shared_ptr für gemeinsamen Besitz.

Da Kinder ihre Eltern nicht besitzen, ist ein roher Elternzeiger in Ordnung. Wenn die Eltern jedoch ihre Kinder besitzen, funktioniert unique_ptr am besten hier.

Es ist auch bemerkenswert, dass was in der Welt , eine verknüpfte Liste von Zeigern? Das macht keinen Sinn. Warum nicht eine verknüpfte Liste von Werten?

    
Puppy 02.07.2012, 09:46
quelle
5

Es ist immer eine gute Idee, intelligente Zeiger zu verwenden, aber hüte dich vor Schleifen von Referenzen.

%Vor%

Deshalb gibt es das weak_ptr an erster Stelle. Beachten Sie, dass sie nicht so schlau sind, um die Schleifen zu erkennen. Sie müssen dies manuell tun und sie mit weak_ptr s brechen.

    
rodrigo 02.07.2012 09:44
quelle
-2

Absolut nicht. Die üblichen Smart Pointer funktionieren nicht mit Graphen Strukturen und sollte vermieden werden. In diesem Fall haben Sie einen Baum und Es ist kein Problem, alle Löschungen (und Zuordnungen) von zu behandeln das Baumobjekt selbst.

    
James Kanze 02.07.2012 09:50
quelle

Tags und Links