3.1.1 Referenzsemantik, Wertsemantik

Container können eine von zwei grundsätzlich unterschiedlichen Verhaltensweisen aufzeigen:

Bei vielen Anwendungen mag es egal sein, welche der beiden Varianten vorliegt; dann ist die Referenzsemantik meist effektiver (weil weniger Daten bewegt werden müssen).

Aber bei vielen Problemstellungen kann sowohl die eine als auch die andere Semantik gewünscht sein. Deshalb sollte eine aus Anwendersicht ,,vollständige`` Bibliothek von Containern eigentlich beides anbieten.

In Java ist in der API von Sun durchweg eine Referenzsemantik realisiert; eine Umstellung auf Wertsemantik ist aufwendig und in der Regel sehr uneffektiv.

In der STL (Teil der Standardbibliothek von C++, der Container anbietet) dagegen ist durchweg eine Wertsemantik umgesetzt. Dies hängt hauptsächlich damit zusammen, daß C++ keine garbage collection kennt, und dadurch bei einer Referenzsemantik Verweise auf Objekte gespeichert würden, deren Lebensdauer vom Container nicht erkennbar oder gar kontrollierbar wäre. Um also Verweise auf nicht mehr existierende Objekte zu vermeiden, wird hier generell mit einer Wertsemantik gearbeitet. Bei Bedarf kann man mit relativ wenig Aufwand eine Referenzsemantik bauen (siehe [KW-C++]); dann muß man allerdings selbst den Überblick über die Lebensdauer der Objekte haben.

Beispiele für jede der beiden Varianten finden sich bei den Musterlösungen in Einfach verkettete Liste eines beliebigen Typs.

www.wachtler.de