next up previous contents index
Next: Elementfunktionendie Pointer auf Up: 50 Ways to Improve Previous: Partitionierung des globalen Namensraumes

Konstante Elementfunktionen

   

Konstante Elementfunktionen sollten keine ``Handles'' auf Datenelemente zurückgeben.

Objekt A: ``Liebling, bleib wie Du bist!''
Objekt B: ``Keine Sorge, Schatz, ich bin const.''

Kann man B trauen???

Beispiel:

    class string
    { char *data;
     public:
      operator char *() const;
    };
    string::operator char *() const
    { return data;
    }
    const string B("I'm const");
    char *str = B; // ruft den operator char*
    strcpy(str,"NoNoNo");

Dadurch wird das private data Element überschrieben.

Der Fehler liegt im Operator char *(), der ein ``Handle'' auf data liefert und andererseits als const markiert ist. Dadurch kann er auf konstante Objekte angewandt werden.

Bessere Lösung:

    string::operator char *() const
    { char *copy = new char [strlen(data)+1];
      strcpy(copy,data);
      return copy;
    }


next up previous contents index
Next: Elementfunktionendie Pointer auf Up: 50 Ways to Improve Previous: Partitionierung des globalen Namensraumes

Peter Pfahler, 1997