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:

    1. 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
    
    1. 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ändert
    

    Sehe 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
    
       // ...
    

Anmelden zum Antworten