>はじめまして。
どうもです。
ここを見ている第三者のために経緯を説明すると、SFファンさんは
既にJavaWorld誌経由で質問されていて、私からも一度回答を返しています。
ただあまり編集さんを煩わせるのもなんですし、よろしければ掲示板の方へ、
と私が書いたので、こちらで質問されたようです。
>そこでVC++への移植を試みました。しかし時々盤オブジェクトの参照で
>アクセスバイオレーションが起きてしまいます。
>Java版と同じ様に盤(cell)をnewしていますが、別クラスもしくは
>Boardクラスの他のメソッドから見れていない様です。
>この件についてJavaWorld経由で前橋氏から解答を貰いましたが
>盤オブジェクトは構造体にしなければいけない様な事が書いてありました。
そういうことを書いた覚えはないですが…
私が書いたのは、以下の通りです。
# その他、本当にC++にすれば速くなるかは疑問、という趣旨のことも書きましたが。
>可能性としては、以下のようなことが考えられるでしょうか。
>
>・メンバにアクセス修飾子を付けない場合のデフォルトの意味が、JavaとC++では
> 異なる(Javaはデフォルトでパッケージ内丸見えだがC++はデフォルトでprivate)。
>・高速化を狙ったのなら、1手先読みするたびにBoardを毎回newするのではなく、
> Boardをスタック上に確保するような変更を加えたのでしょうか?
> もしそうだとして、盤面の配列部分をJava版と同じようにヒープに確保して
> いるとすれば、コピーコンストラクタを正しく書かないと動作しません。
> # Boardをスタックに置いておきながら、盤面の配列をヒープに取るようなことは
> # 普通しないと思うので、この可能性は薄そうですが。
ひとまず「アクセスバイオレーション」とのことなので、コンパイル時のエラー
ではなく実行時のエラーなのでしょう。よってひとつめの可能性は排除できます。
「Java版と同じ様に盤(cell)をnewしていますが」とありますが、もしこれが、
「Boardはスタックにとっているのに2次元配列cellはヒープにとっている」という
ことなら、ふたつめの可能性は考慮する価値があるかもしれませんが…
私のソースを直接C++で書き直したのなら、Boardこそヒープに取るでしょうし、
やっぱり可能性は薄いように思います。
>
http://revolver.at.infoseek.co.jp/hasami-vc
403 Forbiddenです。