const referenz Rückgabe bei getter für nicht fundamentalen Typ



  • class person {
    public:
      person : name("") {} 
      std::string getName() const {return name;} // Version 1
      const std::string& getName() const {return name;}  // Version 2
    private:
      std::string name;
    };
    

    Gibt es einen Grund Version 1 des Getters gegenüber Version 2 zu bevorzugen?

    Gruß,
    maber



  • Die zweite Variante ist nicht mehr möglich, wenn sich die interne Representation des Typs ändert. Z.B.:

    class Person
    {
    public:
        // ...
        std::string getName() { return std::string(vorName).append(nachName); }
    private:
        std::string vorName, nachName;
    }
    

    Die zweite Variante mag performanter sein, gibt aber auch einen Teil der Kapselung auf, da bei der Rückgabe einer Referenz, das Objekt ja erhalten bleiben muss. Folglich also (meistens) eine Membervariable ist. Sofern man davon ausgehen kann, dass sich die Implementation eines Typs nicht mehr ändert, kann man natürlich die zweite Variante verwenden (imho).

    Gruß
    Don06


Anmelden zum Antworten