Initialisierungsliste auf Pointer



  • Ich habe eine Klasse Client, die sieht ungefähr folgendermassen aus:

    class Client
    {
    public:
    Client(Account &acc);

    private:
    Account *m_acc;

    };

    Kann ich den Konstruktor so erweitern, dass m_acc automatisch auf die übergebene Referenz zeigt? Damit meinte ich jetzt nicht m_acc = &acc, sondern per Initialisierungsliste, quasi sowas wie

    Client::Client(Account &acc) : *m_acc(acc)
    {
    ...

    Eine andere Frage ist, macht es überhaupt Sinn, zwischen Referenzen und Pointern hin und herzuwechseln?



  • Ich würde vorher klären, wie lange und wo dein Account Objekt lebt.
    Wenn sichergestellt ist, dass das Account Objekt lange genug lebt dann würde ich eher ein Pointer darauf übergeben (weil du als member einen Pointer hast).

    simon



  • Du kannst in der Initialisierungsliste den Adress-Operator verwenden:

    class Client 
    { 
    public: 
    Client(Account &acc); 
    
    private: 
    Account *m_acc; 
    
    };
    
    Client::Client(Account &acc) : *m_acc(&acc) 
    { 
    //...
    }
    

    wenn das auch nicht das ist, was du willst, weiß ich ehrlich gesagt nicht, was du anders machen willst, außer eventuell keinen Pointer als Membervariable oder keine Referenz als Parameter zu benutzen, sondern das besser aneinander anzupassen.

    Felix

    P.S.: Code-Tags sind schön 💡



  • class Client
    {
        Account& m_acc;
    
    public:
        Client(Account& acc) : m_acc(acc) {}
    };
    

    ?

    class Client
    {
        Account* m_acc;
    
    public:
        Client(Account& acc) : m_acc(&acc) {}
    };
    

Anmelden zum Antworten