Ich habe einige Klasse Foo und Logger:Wie erstellt man ein Array mit Referenz-Member in C++?
class Logger{/* something goes here */};
class Foo{
Foo(Logger& logger);
Logger& logger;
}
Foo::Foo(Logger& logger) : logger(logger)
{}
Jetzt möchte ich ein Array von Objekten der Klasse Foo erstellen, in dem alle Referenzen Foo::logger
auf den gleichen Logger
Objekt zeigen sollte. Ich habe versucht, so etwas wie (ich brauche sowohl Stack und Heap-Allokation):
Logger log (/* parameters */);
Foo objects [3] (log); // On stack
Foo* pObjects = new Foo [3] (log); // On heap
Das Problem ist, dass beide Versionen Foo()
den Standard-Konstruktor aufzurufen, die nicht vorhanden ist. Ebenso wie ich es verstehe, ist es nicht möglich, die referenzierte Variable einer Referenz zu ändern. Daher hilft auch ein temporärer Aufruf des Standardkonstruktors und eine spätere Initalisierung in einer Schleife nicht.
Also: Was ist der richtige Weg? Muss ich Zeiger auf das Objekt Logger
verwenden?
Um sicher zu sein, dass ich Sie verstehe: Sie meinen ein statisches Mitglied für alle Objekte? Wie initialisiert man es dann? Oder ein separates Objekt/globale Variable/...? –
Er meint eine Singleton-Klasse, die von überall in Ihrem Code zugänglich ist. Dies ist der übliche Weg für Logger. – giorashc