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?
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?
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.
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.
Tags und Links c++ c++11 pointers smart-pointers