Gibt es einen Namen, der diese Redewendung beschreibt?
In UML heißt es Aggregation. Es unterscheidet sich von Zusammensetzung, dass das Mitgliedsobjekt nicht im Besitz des vorlegenden Klasse. In C ++ können Sie die Aggregation auf zwei verschiedene Arten implementieren, über Referenzen oder Zeiger.
Ich gehe davon aus, dass der möglicherweise große Aufwand beim Kopieren eines großen komplexen Objekts vermieden werden soll.
Nein, das wäre ein wirklich schlechter Grund, dies zu nutzen. Der Hauptgrund für die Aggregation ist, dass das enthaltene Objekt nicht dem enthaltenen Objekt gehört und daher deren Lebensdauer nicht gebunden ist. Insbesondere muss die Lebensdauer des referenzierten Objekts die des referenzierenden Objekts überleben. Es wurde möglicherweise viel früher erstellt und lebt möglicherweise über das Ende der Lebensdauer des Containers hinaus. Außerdem wird der Status des referenzierten Objekts nicht von der Klasse gesteuert, sondern kann sich extern ändern. Ist dies nicht const
der Fall, kann die Klasse den Status eines Objekts ändern, das außerhalb des Objekts lebt.
Ist das im Allgemeinen eine gute Praxis? Gibt es Fallstricke bei diesem Ansatz?
Es ist ein Designwerkzeug. In einigen Fällen ist es eine gute Idee, in anderen nicht. Die häufigste Gefahr besteht darin, dass die Lebensdauer des Objekts, das die Referenz enthält, niemals die Lebensdauer des referenzierten Objekts überschreiten darf. Wenn das einschließende Objekt die Referenz verwendet, nachdem das referenzierte Objekt zerstört wurde, liegt ein undefiniertes Verhalten vor. Im Allgemeinen ist es besser, die Komposition der Aggregation vorzuziehen, aber wenn Sie sie brauchen, ist sie genauso gut wie jedes andere Werkzeug.