Hossa
Der Aufruf von Boss erfolgt bei dem genannten Schema immer über
Boss::Ref()
und du erhälst eine Referenz auf das einzig existierende Boss-Objekt zurück. Möchtest du z.B. auf das Objekt a innerhalb des Boss-Objektes zugreifen, schreibst du einfach:
Boss::Ref().a
Ich nutze diese Form recht gerne, weil ich durch „Boss::“ quasi einen Namespace habe.
Wenn dich das „Boss::“ stört, kannst du an Stelle der Ref()-Funktion auch eine friend-Funktion einbauen:
class Boss
{
Slave a;
Slave b;
...
private:
Boss(); //Alle Konstruktoren "private" machen
friend Boss& theBoss();
};
Boss& theBoss()
{ static Boss b;
return b;
}
Die friend-Funktion theBoss() hat Zugriff aus alle privaten Elemente der Klasse Boss, also auch auf die privaten Konstruktoren. Daher klappt das genau so wie mit der vorigen Funktion Ref().
Auch hier gibt es genau ein Boss-Objekt, das du über den Aufruf theBoss() ansteuerst. Möchtest du also z.B. auf das Element a des Boss-Objektes zugreifen, schreibst du einach:
theBoss().a
Ob diese Konstruktion einen bestimmten Namen hat, weiß ich leider nicht. Sie wird gerne benutzt, um Resourcen anzusteuern, die nur einmal verfügbar sind, etwa für Drucker, Kartenleser, …
thePrinter();
theCardReader();
Die meisten Implementierungen machen jedoch den Fehler, dass sie einen Pointer zurück liefern. Um Ärger zu vermeiden, nimmt man am besten eine Referenz, die bezieht sich immer auf ein existierendes Objekt, so dass man sich nicht mit irgendwelchen Null-Zeigern rumschlagen muss.
Viele Grüße