>>148さんの問題って
X1 x1;
X2 x2; <-ここで初期化されてない
x1 = new X1( x2,1 ); <-でもここでx2を使っている
x2 = new X2( x1,2 );

が問題じゃないんですか?