Konstante Elementfunktionen sollten keine ``Handles'' auf Datenelemente zurückgeben.
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;
}