グローバル変数だからといって頭ごなしにぶち切れるのもいかがなものか…
CPU視点でやるべきことに対して処理順序にあいまいさが生じないなら実行上問題無いし、
プログラマーの視点で管理できる個数なら実用上も問題無い
同一クラスの複数インスタンスが欲しければグローバルな配列にしたらやり過ごせる

ていうか仮にtheAppを根とする木構造で全てのデータを管理することを思い立ったとして、
その木の根付近をぶち切って得た2〜3の大枝をグローバル変数を根とするそれぞれ別の木にする、ぐらいの
挿し木設計は設計上のショートカットとして許されるべきや
というのは、プログラムのあらゆる箇所で
 theApp()->getMemberA()->getMemberAA()->getMemberAAA()->...->getMemberZZ()->getValue()
と書かねばならなかったものが、
 g_dataAA->...->getMemberZZ()->getValue()
ぐらいで済む