C ++ raw pointer und std :: shared_ptr
Ich arbeite mitstd::shared_ptr
und während meiner Softwareentwicklung habe ich einige Fälle kennengelernt, bei denen ich Zweifel an der Speicherverwaltung hatte. Ich hatte eine Bibliothek von Drittanbietern, die mir immer rohe Zeiger von Funktionen gab, und in meinem Code habe ich sie in umgewandeltstd::shared_ptr
(Von Standard und nicht von Boost. Übrigens, was ist der Unterschied zwischen den beiden?). Angenommen, ich habe den folgenden Code:
ClassA* raw = new ClassA;
std::shared_ptr<ClassA> shared(raw);
Was passiert jetzt, wenn der gemeinsame Zeiger den Gültigkeitsbereich verlässt (sagen wir, er wurde lokal in einer Funktion deklariert und jetzt verlasse ich die Funktion)? Wird dieClassA
Objekt existiert noch, weil ein roher Zeiger darauf zeigt?