[gelöst] [boost] shared pointer als Klassenvariable?
-
Hallo,
gibt es eine Möglichkeit, einen shared_pointer global in der Klasse anzulgen?
Ein Objekt "Control" steuert bei meinem Design ein anderes Objekt "Build", in dem in einer Mehtode ein shared Pointer erstellt wird:
BSP:void readin(int value)
{
boost::shared_ptr<int> i1(new int(value));
}Nun möchte ich in einer anderen Methode auf eben diesen shared_pointer zugreifen...wie mache ich das geschickt?
Ich muss gestehen, dass ich die Boost Dokumentation an der Stelle einfach nicht verstehen will:
http://www.boost.org/doc/libs/1_40_0/libs/smart_ptr/shared_ptr.htmWeder in den Programmiertechniken noch sonstwo steht was über globale Variablen.
Der Artikel in diesem Forum bringt mich leider auch nicht weiter:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-134971.htmlIch könnte den Smart Pointer in einem Vector oder Stack speichern, dies wäre IMHO allerdings nur ein Umgehen des eigentlichen Problems.
Danke schonmal für eure Hilfe
MetalMan
-
MetalMan schrieb:
gibt es eine Möglichkeit, einen shared_pointer global in der Klasse anzulgen?
Nein. Einfach weil "global" und "in der Klasse" Gegensätze sind. Meinst du vielleicht static?
-
Du hast natürlich Recht, meine Frage ist ob ich einen shared Pointer in der Klasse anlegen kann (in der Header) um dann in ALLEN Methoden darauf zugreifen zu können.
Bisher habe ich den SmartPointer nur in einer Methode gebraucht, daher habe ich den shared_pointer erstellt und anschließend in gespeichert.
Nun musste ich die Methode aufsplitten. Das Erzeugen geschieht in einer Methode, das anschließende speichern muss in einer anderen Methode geschehen.
Derzeit löse ich das Problem mit einem Stack, was aber wie gesagt nur ein Notbehelf ist.
Gruß
-
Meinst du so etwas?
#include <iostream> #include <boost/smart_ptr.hpp> class MyClass { boost::shared_ptr<int> Value_; public: void f() { Value_.reset( new int( 42 ) ); } void g() { if( Value_ ) { std::cout << *Value_ << std::endl; } } };Vielleicht ist boost::optional besser geeignet?
-
Genau das meine ich :).
Klar, mit reset kann man den Wert des Pointers neu setzen...genial!!!
Darauf bin ich einfach nicht gekommen :(.Funktioniert wie gewünscht...besten Dank!