singletonオブジェクトの終了処理の順番を決めたいなら、
意図的に終了処理の逆順でオブジェクトを生成するか、
終了処理を自前で書くか、だな
終了処理を実行する関数をオブジェクト生成時にatexitで登録しておけば
main終了後に勝手に終了処理してくれる
(クラスAとBで両方同じ関数を登録するので、二度呼ばれても大丈夫なように作る必要はある)