Referenzen
kann man sich für viele
Anwendungsfälle als Zeiger mit vereinfachter Schreibweise vorstellen.
Damit kann man aber die Fehler, die man mit Zeigern gerne und oft
praktiziert, auch eleganter mit Referenzen ausdrücken.
Ebenso, wie man mit Zeigern auf Speicher zugreifen kann,
auf den man gar nicht zugreifen darf, kann man
mit Referenzen schöne Fehler produzieren:
- Zeiger p noch nicht initialisiert, aber schon eine
Referenz mit
*p
initialisiert: Falsch!
- Speicher allokiert, Referenz darauf initialisiert, dann den
Speicher wieder freigegeben, und die Referenz munter
weiterverwenden: Falsch!
- Speicher allokiert, Referenz darauf initialisiert,
dann den
Speicher mit realloc() an eine andere Stelle verschoben, und die
Referenz auf den inzwischen ungültigen Speicher weiter
verwenden: Falsch!
- eine Referenz auf eine automatische
Variable anlegen,
nach dem Verlassen des umgebenden Blocks der automatischen Variable
die Referenz weiterverwenden: Falsch!
Der Programmierer muß darauf
achten, daß eine Referenz nur auf Speicher verweist, auf den man auch
noch zugreifen darf. Beispielsweise ist es ziemlich debil, wenn
eine Funktion eine Referenz auf eine eigene lokale Variable zurückgibt;
nach dem Rücksprung aus dieser Funktion kann mit der Referenz niemand etwas
anfangen, weil die zugehörige Variable nicht mehr existiert.
AnyWare@Wachtler.de