もうすぐ6月号が出るような時期に、なぜかそふで5月号をチェックしている罠。
$FS = $; x 2;みたいな記述があって、なんだろコレ?なんてしばらく悩んでいたのはここだけの秘密。 (man perlvarして正解を発見。 結局は $FS = "\x1c\x1c"; と同じことになる。)
2ちゃんねるのFF11スレッドをちょっと見物したところ、物凄い状況になっている模様。 「12時間もリトライしてますが、まだゲーム開始に辿り着けません!」とか、 「登録に挑戦し続けて、5000円分のWebマネー、残り900円分しか残ってないよ!」とか。(何かの登録に100円かかるらしい。)
どんどんインストールして環境構築。
初回インストールの素敵な青画面が嘘のように安定しているDual Athlonマシン。 AMD ChipSetでUSBを使うのはこれが初めてなんだけど、なんとなく動作している様子。 ここまで順調だと、なんか怪しいな…。
今日はPSO Ver.2(Windows版)とDirectX 8.1とUSB→PS2コントローラドライバをインストール。
試しにPSOの設定を「ハイエンド」にしてみたが、ちょっと遅いけどそれなりに遊べているような状態。
すげ〜CPUパワーかも。
以前作成していた統合検索スクリプト。
結局、UNICODE→x-sjis変換はCGIに任せることにした。
JavaScript→CGIのデータ送信は、フレームを使って、別フレーム内部にwindow.open("cgi-bin/jcodecnv.cgi?%u3078", "data");などとすることに。
CGI→JavaScriptのデータ受信は、別フレーム内部にCGIスクリプトが出力したフォーム内容をJavaScriptから読むことに。
実に怪しい連携だ。
全部CGIから出力したJavaScript内蔵ページを使う形式にすれば良かった...。
現在製作中。
動くようになったら今のページと入れ換える予定。
ちくと読書。 うお…この本は…すごく良い…。 みんな買うように。 つうか、買え。
しかし、すごいテクだな...。
templateが出現してからもうずいぶん経つけど、ついにここまで来たか...という印象。
ただ、#defineの出現頻度が割と高いので、ここはやっぱりC++言語側でなんらかのサポートが必要なんじゃないだろうか、と思ってみたり。
しかし、何の前知識もなくこのソースみたら気絶するよな...。
template<cool> struct CTAssert; template<> struct CTAssert<true> {};は、
template<bool> struct CTAssert; template<> struct CTAssert<true> {};が正しいとのこと。 ここ見ててcoolってなんだよとか悩んでいた(汗;)。
後日談。 gcc-2.95.3で試すと、ちょこちょこ動かなかったりする。 まだ日常的に利用可能な領域までは来てないかな?
placement new (配置new)をやった後のアドレスの話。
virtualを持たないclassの配列でも、元のアドレスから4バイトとか後ろにずれることがあるのを初めて知った。
gcc-2.95.3で適当に試したところ、virtualではなくともユーザー定義のデストラクタがclass内部に存在すると、アドレスが後ろにずれた。
char* addr = new char[sizeof(SomeData[3])]; などと、サイズキッチリでメモリを確保していると、後ろのデータが壊れる...。
この手の、裏で処理系が使っている領域はsizeofでは測定できないけど、*本当*に使うメモリサイズの測定方法ってどうやるんだろ。
// // placement new (配置new) のテスト // #include <iostream> using namespace std; struct SampleData { int a; int b; int c; ~SampleData() { cout << "-"; }; }; int main() { cout << "--------------------placement new した時、アドレスはどう変わる?" << endl; char* addr = new char[1024]; cout << "取得アドレス = " << hex << reinterpret_cast<long>(addr) << dec << endl; SampleData* ptr = new (addr) SampleData[3]; cout << "placement new した後のアドレス = " << hex << reinterpret_cast<long>(ptr) << dec << endl; }
後日談。s/replacement/placemnt/g でした。
もうだいぶ前にリリースされていたMozilla-1.0-RC-3をちくとコンパイルしてインストール。
外見上、変更点はさっぱりわからず。
なるほど!。
情報ありがとうございます。
というわけで。
本日の教訓:placement new でデストラクタ付きclassの配列を配置 newするのは危険、通常は配置newの使用は避けるべきだが、やむを得ない場合はPOD(plain old data)のみにせよ。
p.s.
s/replacement/placemnt/g とこっそり訂正(汗;)。
えーと、POD(plain old data)とは...。 以下の条件を満たすもの。 (後日資料をチェックして補完予定。)