shared_ptr und this-Zeiger
-
Hallo,
ich möchte shared_ptr verwenden und frage mich wie ich einen solchen mit dem this-Zeiger initialisiere?
Der Grund ist die folgende Klasse. Und zwar möchte ich verhindern das in itsSubAbcs ein shared_ptr enthalten ist der auf das eigene Objekt zeigt.
class Abc { public: typedef boost::shared_ptr<Abc> AbcPtr; public: void addSubAbc(const AbcPtr& aSubAbc); private std::set<AbcPtr> itsSubAbcs; };Dazu müsste ich es erstmal schaffen einen this-Zeiger an einen shared_ptr zu übergeben. Schaffe ich aber nicht!
Weiß jemand Rat?
-
goran schrieb:
Der Grund ist die folgende Klasse. Und zwar möchte ich verhindern das in itsSubAbcs ein shared_ptr enthalten ist der auf das eigene Objekt zeigt.
Du kannst doch in
addSubAbcmitaSubAbc.get()auf!= thisprüfen.goran schrieb:
Dazu müsste ich es erstmal schaffen einen this-Zeiger an einen shared_ptr zu übergeben. Schaffe ich aber nicht!
Woran hapert's denn, ein this-Zeiger ist doch wie jeder andere Zeiger auch? Evtl hilft auch die reset-Methode von shared_ptr?
-
goran schrieb:
ich möchte shared_ptr verwenden und frage mich wie ich einen solchen mit dem this-Zeiger initialisiere?
-
Hallo,
danke für die Antworten. Das get()-Methode war das was ich gesucht habe.
Sorry, hätt' ich die Doku genauer unter die Lupe genommen hätte ich nicht fragen/nerven
brauchen.Gruß, Goran
-
Du kannst auch einen dummy shared_ptr auf this basteln indem du einen dummy-deleter übergibst der einfach nix tut.
-
hustbaer schrieb:
Du kannst auch einen dummy shared_ptr auf this basteln indem du einen dummy-deleter übergibst der einfach nix tut.
Naja, aber die übliche Methode ist, seine Klasse von
enable_shared_from_this<class>erben zu lassen.
-
Oder man benutzt direkt nen intrusive_ptr... Wobei ich da außer "Locality" (Der Count steht halt direkt beim Objekt im Speicher, wenn man es so implementiert) und eventuell etwas weniger Aufwand nur Nachteile sehe, weil weak_ptr's eine schöne Sache sind

-
Tachyon schrieb:
hustbaer schrieb:
Du kannst auch einen dummy shared_ptr auf this basteln indem du einen dummy-deleter übergibst der einfach nix tut.
Naja, aber die übliche Methode ist, seine Klasse von
enable_shared_from_this<class>erben zu lassen.Wenn man sowieso schon verlangt dass alle Objekte des Typs um den es geht von einem shared_ptr kontrolliert werden, dann ja. Wenn nicht, weil man Fälle erlauben will wo so ein Objekt z.B. auf dem Stack liegt, und man den "shared_ptr auf this" nur kurz, lokal in einer Funktion braucht, und garantiert ist dass sich den keiner ausserhalb dieser Funktion aufhebt, ... in so einem Fall halte ich den "dummy deleter" Trick für OK.