Was die gleichartigen Nutzungen jeden Smart-Pointer im Vergleich zu ähnlichen (aber nicht beschränkt auf) einigen fortgeschrittenen Techniken unter Verwendung von rohen Zeigern sind ?std :: unique_ptr vs std :: shared_ptr vs std :: weak_ptr vs std :: auto_ptr vs raw Zeigern
Mein Verständnis ist minimal, aber von dem, was ich sammeln:
- Raw Pointers: Verwenden Sie nur, wenn Sie wirklich, wirklich, wirklich, wirklich wissen, was Sie tun und haben sorgfältig Nutzung hinter versteckt eine Schnittstelle.
- std :: auto_ptr: Veraltet nie verwenden.
- std :: unique_ptr: Singleton Zeiger, der Besitz auf Zuweisung überträgt.
- std :: shared_ptr: Referenz gezählt Zeiger, nicht Besitz auf Zuweisung nicht übertragen, sondern erhöht seinen Referenzzähler. Wenn alle Referenzen verlassen Umfang oder explizit
std::shared_ptr::reset
die zugrunde liegendendeallocator
genannt wird. - std :: weak_ptr: Ein Untertyp
std::shared_ptr
, der die Referenzzählung nicht inkrementiert und ungültig wird, wenn seine übergeordnetestd::shared_ptr
nicht mehr vorhanden ist. Kann zurückkehren und ungültige Referenz. Überprüfen Sie immer vor der Verwendung.
Rohzeiger GLEICHWERTIGEN Beispiele
Referenzzählung, Cache-Implementierungen:std::map<std::string, std::pair<long, BITMAP*> > _cache;
Singletons mit Übertragung des Eigentums:
class Keyboard {
public:
//...
static Keyboard* CreateKeyboard();
~Keyboard();
//...
private:
//...
Keyboard();
static Keyboard* _instance;
//...
};
Aggregate Con tainer, kein eigentum: Spatial Partitionierung Graphen und Bäume, iterative Container, etc.
Composite-Container, Eigentum: Große Objekte.
--EDIT--
Wie ich arbeite ich auf einen interessanten Fall kam, wies darauf hin, dass DeadMG intelligente Zeiger sollen so einfach Abstraktionen verwendet werden Ressourcenmanagement zu kümmern; Was ist mit Dateibereichsobjekten, die zum Zeitpunkt der Deklaration nicht auf dem Heap erstellt werden können, sondern stattdessen zu einem späteren Zeitpunkt erstellt werden müssen?
Ich verstehe nicht, was Sie fordern. Wie man intelligentes Zeigerverhalten mit rohen Zeigern implementiert? –
Ich habe keine Ahnung, was diese Frage ist, aber wenn Sie 'unique_ptr' einen Singleton-Zeiger aufrufen, vermute ich, dass Sie hier eine ganz andere Bedeutung von Singleton haben. – Puppy
@NeilKirk Das genaue Gegenteil, was sind die Verwendungen von Smartpointern im Vergleich zu rohen Pointern? d.h. welches Idiom soll jeder intelligente Zeiger ersetzen? – Casey