Das sieht vielleicht konstruiert aus, aber ich glaube nicht, dass das abwegig ist, was ich mache. Ich habe zwei Objekte A und B auf dem Stack und ein Attribute von A fängt irgendwann an, auf B zu verweisen. Ich vermute, das ist schon genug, damit bei der falschen Reihenfolge das Verhalten laut Standard undefiniert wird (nicht nachgelesen allerdings); in der Praxis hat es nicht gereicht, weil B - obwohl destruiert - immer noch auf dem Stack liegt. Deswegen habe ich in B intern noch ein Objekt C auf dem Heap eingeführt, das mit dem Destruktor definitiv ungültig wird.
Ich finde das alles ganz und gar nicht abwegig. C ist ein Implementierungsdetail von B. Der entscheidende Fehler, den das Programm macht, ist, dass es einem früher definierten Objekt ein später definiertes als Attribut zuweist. Dass das Vertauschen von Definitionen, die (bei der Initialisierung) nicht voneinander abhängen, ein Programm fixt, kann man logisch finden, wenn man unbedingt will. Muss man aber sicher nicht.