register methode
-
Abend,
ich will in meiner Klasse A eine register Methode implementieren, die ein Objekt B bei der Klasse registriert. Wenn A dann das registrierte Objekt intern ändert, soll wirklich das registrierte Objekt B geändert werden!
Im Moment sehe ich da nur 2 Möglichkeiten:
- Referenz
class A { B& b; public; A(B& bObj) : b(bObj) { } void tuWas() { b.x = ... /* ändere B */ } }; //Nutzung: B b; A a(b); a.tuWas(); // hier wird jetzt b geändert- Zeiger
class A { B* b; public; A() : b(0) { } void register(B * bObj) { b = bObj; } void tuWas() { b->x = ... /* ändere B */ } }; //Nutzung: B b; A a; a.register(&b); a.tuWas(); // hier wird jetzt b geändertSehe ich das richtig, dass das die einzigen 2 Lösungsmöglichkeiten sind?
Es ist ja nicht möglich, dass ich in A eine Referenz auf B habe (B& b) und diese dann NICHT im Ctor setze, sondern erst mit einer register Methode, oder?
-
*hochschieb
-
Du könntest B noch in einen shared_ptr (aus tr1 bzw. boost) verpacken.
// B.h: #include <memory> struct B{ int x; } typedef std::tr1::shared_ptr<B> B_PTR;// A.h: #include "B.h" class A{ B_PTR m_b; public: //... void Register(const B_PTR& b){ m_b = b; } void tuWas(){ m_b->x = 123; } }// Irgendwo anders... //... B_PTR b(new B()); // B-Objekt existiert solange, wie es mind. eine Kopie von b gibt b->x = 0; // Jetzt ist [B-Objekt auf das b zeigt].x == 0 //... A a; a.Register(b); a.tuWas(); // Jetzt ist [B-Objekt auf das b zeigt].x == 123 // ...