>
http://revolver.at.infoseek.co.jp/hasami-vc.lzh
まず、うちにはVC++をコンパイルする環境はないですし、デバッグまで
するつもりもないので、ざっと眺めた感想ですが。
BoardがBoard.cppで定義されていて、#include "Board.cpp"してるとかは
さておくとしても、PlayerがBoardの実体を保持していてはいかんでしょう。
Playerがふたりいるとき、それぞれがBoardを抱え込んでいては、ゲームに
なりません。
先読みのときBoardをヒープにclone()するのなら、以後それはポインタで
持ち歩いたほうがよさそうに思うのですが、実体で引数渡ししていますし。
Boardの中のcellは、実体で持ってよさそうですがポインタで保持してますし、
にもかかわらずBoardにコピーコンストラクタがありません。
それぞれがaccess violationの原因になるかどうかはさておき、
C++を使うのなら、ポインタと実体の区別を意識するのが重要だと思います。
Javaにはポインタしかないので、Javaから移植するのなら、なんでもかんでも
ポインタにするのが楽かもしれません(メモリリークを起こしそうですが)。
なお、ここでは「実体」という言葉を、「ポインタではないデータそのもの」
という意味で使っています。
以前読んだC++本では、引数の参照渡しを「実体渡し」と呼んでてびっくりしました。
「コピーではなく、それそのものを渡す」という意味で「実体渡し」なんだろうと
思いますが、一般的かなあ…
私のように「ポインタではないデータそのもの」の意味で「実体」という言葉を
使うのもさほど一般的ではないかもしれませんが、参照渡しを実体渡しと読んでいるのは
その本(およびその本に言及したWebページ)以外では、私は見たことないです。
そんなの広く使われてるじゃん、という方は情報よろしくお願いします。