私はいくつかのクラスFooとLoggerを持っています:
class Logger{/* something goes here */};
class Foo{
Foo(Logger& logger);
Logger& logger;
}
Foo::Foo(Logger& logger) : logger(logger)
{}
次に、クラスFooのオブジェクトの配列を作成します。ここで、すべての参照Foo::logger
は同じLogger
オブジェクトを指す必要があります。私は次のようなことを試しました(スタックとヒープの両方の割り当てが必要です):
Logger log (/* parameters */);
Foo objects [3] (log); // On stack
Foo* pObjects = new Foo [3] (log); // On heap
問題は、両方のバージョンが、存在しないデフォルトのコンストラクターを呼び出そうとすることですFoo()
。また、私が理解しているように、参照の参照変数を変更することはできません。したがって、デフォルトコンストラクターへの一時的な呼び出しと、その後のループでの初期化も役に立ちません。
だから:それを行う正しい方法は何ですか?Logger
オブジェクトへのポインタを使用する必要がありますか?