>たとえばバトルクラス(のオブジェクト)がキャラクラス(のメソッド)に、
>キャラクラスがウェポンクラスに、と短いアクセスを繰り返す
AがBのメソッドを呼び出して、その呼び出され先で、
BがAのメソッドを呼び出し返す、という糞みたいなコードが量産されるわけですね。
わかります。相互参照最高!卓球楽しいですよね。

>セッターすら使わず、コンストラクタで設定する方法
設定されたオブジェクトが途中で破棄されうる場合は一体どうするんですか?
汚い相互参照しているだろうから、参照カウンタ方式は使えませんよね。
GCのある言語を想定しているんですか?でも彼はC++で書きたいみたいですよ。
それとも、お得意のweak_ptr悪用テクニックですか?