Строго говоря, использование глобальных переменных в С++ встречается редко. Это допустимо, но по большей мере для обеспечения совместимости с С. В С++ для передачи контекста используют другие приемы, например "передачу по указателю" (ниже). Стоит также сказать, что глобальные переменные сопряжены с кое-какими нюансами, например, могут возникнуть проблемы с последовательностью инициализации.
Но, судя по Вашему вопросу, Вам не нужны глобальные переменные. Достаточно будет кода на подобие этого:
/*
* gameinstancehandler.h
*/
class GameInstanceHandler{
public:
GameInstanceHandler(CGameHud *instance):
mInstance(instance){}
private:
CGameHud *mInstance;
// something other here
}
#inlucde <gameinstancehandler>
int main(int argc, char **args){
CGameHudInstance *gameHub = new CGameHud(argc, args);
GameInstanceHandler *handler = new GameInstanceHandler(gameHub);
return 0;
}
Здесь контекст передается по указателю. Объекты, поведение которых зависит от других, уже созданных объектов, просто получают указатели на них в конструкторе, сохраняют его "у себя" и взаимодействуют с ними через сохраненную копию указателя.
P.S. Поскольку вопрос новичковый, позволю себе дать еще один совет: во время объявления указателя пишите звездочку перед идентификатором, а не после типа.
int *a; // хорошо, a — это указатель.
int* b; // плохо, но допустимо.
int* c, d; // совсем плохо, c — указатель на int, d — просто переменная типа int.
int *e, *f; // при такой же записи все понятно сразу.