std::shared_ptr frage
-
In meinem Programm alloziiere ich etwas auf dem Heap und möchte den Pointer darauf später zu einem shared_ptr machen, sodass automatisch ein delete bei verlassen des Gültigkeitsbereiches augerufen wird.
Sowas:
struct my_obj; my_obj obj = new my_obj(); obj->myMethod(); [...] std::shared_ptr<my_obj> obj_ptr(obj); return obj_ptr;
Geht das? Finde mich in der Dokumentation irgendwie nicht so zurecht ...
-
Wenn du noch nen * in Zeile 2 spendierst, geht das schon. Es ist aber sinnvoller, gleich
std::shared_ptr<my_obj> obj = std::make_shared<my_obj>(); obj->myMethod(); return obj;
zu schreiben, dann bist du automatisch alle Exceptionsicherheitsprobleme los, die im Zusammenhang mit diesem Objekt entstehen können (sonst müsstest du dich explizit darum kümmern, wenn myMethod eine Exception wirft).
-
ptrask schrieb:
In meinem Programm alloziiere ich etwas auf dem Heap und möchte den Pointer darauf später zu einem shared_ptr machen, sodass automatisch ein delete bei verlassen des Gültigkeitsbereiches augerufen wird.
Willste nur das und brauchst den Pointer nicht zu kopieren, nimm std::unique_ptr.