Ваш класс Game
должен создать экземпляр Allegro
, и тот же экземпляр должен быть передан Input
и Graphics
, а два последних просто будут содержать ссылку экземпляра.
class Game
{
Game() : allegro(/*..*/), keyBoardinput(allegro), Gamegraphics(allegro) {}
private:
Allegro allegro; //actual instance
Input keyBoardinput;
Graphics Gamegraphics;
};
Обратите внимание, что порядок членов в Game
важен.allegro
должен быть объявлен до keyBoardinput
и Gamegraphics
.Это гарантирует, что allegro
будет создан перед двумя остальными, а затем вы передадите allegro
(полностью созданный экземпляр) конструкторам Input
и Graphics
.
И затем убедитесь, чтоInput
и Graphics
содержат ссылку из allegro
, переданную из Game
.Не делайте копию allegro
:
class Input
{
public:
Input(Allegro & allegro) : allegro1(allegro) {}
private:
Allegro & allegro; //reference - not copy!
};
class Graphics
{
public:
Graphics(Allegro & allegro) : allegro1(allegro) {}
private:
Allegro & allegro; //reference - not copy
};
Обратите внимание, что все эти классы используют member-initialization-list , что также очень важно здесь.