////////////////////////////////////////////////////////////////////
/*

    KAB-studio.h


    (C)KAB-studio 1999 - 2003 ALL RIGHTS RESERVED.
        http://www.kab-studio.com/
        info@kab-studio.com

    送信日： 2003/06/30(Mon) No.213
    配信数： 3030 ( Mag2 + Pubzine )
＊    発行元： まぐまぐ ( URL: http://www.mag2.com/  ID: 0000012198 )
＊    発行元： Pubzine ( URL: http://www.pubzine.com/  ID: 590 )
*/
////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////
/*                ２００３年６月３０日（月）の更新                */
http://www.kab-studio.com/

・ほとはー１話追加！
　三人合体ホットハーブに１話追加。久々のハオシャオ登場！
[ 三人合体ホットハーブ ]
http://www.kab-studio.com/Comic/HotHerb/


////////////////////////////////////////////////////////////////////
/*                        ちょお普通な日記                        */
http://www.kab-studio.com/nikki2/

2003/06/22 (Sun)
　朝から晩までほとはー夏コミ版。トーン難しい。とにかく描かないと。
１６ページが大変……。ほとはー本編は他の案とか。 KAB-studio.ROM には
秀丸マクロも。そして COM のメンバ関数の呼び方。

2003/06/23 (Mon)
　GUI デザインツール使い勝手悪い。きっこさんをメジャーにした作品っ
て？　ほとはー夏コミ版の最後に入れるページ。そして KAB-studio.ROM は
買えない？　そして後輩をアシに。そして vtable 。

2003/06/24 (Tue)
　GUI ツール、ホントに使い勝手悪い。 UML とか取らないと。帰りに送別
会で飲み。夏コミ来てねー。そして vfptr 。

2003/06/25 (Wed)
　今日からはテスト仕様書書き。 Jakarta-common の Pool 。おねてぃドラ
マＣＤとか。ボーナスの使い道は。ほとはー本編の下描き。ハオシャオはホ
ントはちょい役だったのに……。

2003/06/26 (Thu)
　テスト仕様書書いてバグ見つかったんで直して。 Eclipse で UML モデリ
ング。チャロンマーズをしたら疲れた。 DIGICOMI TOOLS が売り切れ。なん
か色々あってあうー。

2003/06/27 (Fri)
　テスト項目かなり多い。帰りにねこのしっぽ様へ。ページ数勘違いして
た。武蔵小杉＆横浜経由で帰る。また 500 エラー、でも原因不明……。

2003/06/28 (Sat)
　夜中にサーバーメンテ。 Tomcat3.1.1a に変えたらエラー出まくり。
mod_jk.conf が手には入ったら Tomcat4 に切り替え。ツッコミシステム復
活。 Tomcat4 専用でもいい？　ほとはー本編とほとはー夏コミ版を。コマ
割りマンガは描いてて楽しい。ミルモでポン！がなにげに良かった。現視研
のある大学は？


////////////////////////////////////////////////////////////////////
/*                         風雅、舞い                             */
http://www.kab-studio.com/Novel/Fuga/

■　第八章　朱と碧　−１−

　朱き泉。
　直径５００メートルもないであろう敷地を、岩壁が囲んでいる。ぱっと見
では、自分たちが入ってきた入り口以外に外への道はない。
「さながら小さな砦ってところね」
「おまえんところだってそうだろう」
「え？」
　自分の故郷をそういう視点で見たことはなかった。
　それに、この場所は自分の故郷とはだいぶ違う。畑があり、牛がいて、自
給自足ができているように見える。
「あ！　久しぶり！！」
　畑の中にいた男が雅樹に声を掛ける。
「おう！　赤葉（せきは）様は！？」
「さっき泉の方に行くの見かけたぞ！！」
「あんがと！」
　大声の会話は、親しげだった。
「泉って、やっぱ朱き泉？」
「もちろん。……どうした？」
　雅樹は、舞の顔色が悪いと感じた。
「すごく……違和感があるの。雅樹は平気なの？」
「そりゃもちろん」
「そうじゃなくて、碧き泉にいたときの話」
「あ、そういうことか。要は慣れだ」
「慣れ……」
　慣れる前にダウンしそうな気分だった。
　雅樹に連れられて畑の間の道を進むと、ちょうど村の中央に大きな井戸が
あった。中には窮屈な螺旋階段がついていて、雅樹は体を縮めながら降りて
いく。
　階段の１段目に足を乗せた瞬間、舞は吐き気を催した。
「うっ」
「大丈夫か？」
「……」
　舞は何も言わず、雅樹の方へと降りていく。顔が苦痛に歪んでいたが、そ
れ以上に、絶対に行くという意志を感じさせて、雅樹はあきらめてそのまま
進んでいった。
　降りる度に強くなる……と思われた違和感は、むしろ楽なものへと変わっ
ていった。
「……そんな簡単に慣れちゃったのかな……」
　顔が少し緩んでそんなことを考えつつ降りていくと、黄色い光が見えた。
                                                              (続く)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
『ツッコミシステム、落ちまくってるね』
「なかなか難しいね……」
『ウェブアプリだっけ、こういうプログラムってわからないけど』
「ある意味、 C++ やるより簡単かも」
『へ！？　そうなの？』
「範囲が狭いから、重点的に必要なことをしっかり学べば」
『ぷらとわはやらなくていい？』
「今はね」
『今は？』
「ウェブアプリは今の流行。ぷらとわはそういうのにとらわれないから」
『流行が終わってもだいじょうぶ、と』
「そういうこと」
『また嫌なこと言う〜』
「っ？」
http://www.kab-studio.com/
_______________________________________________________________[KCM]


////////////////////////////////////////////////////////////////////
/*                       #pragma twice                            */
http://www.kab-studio.com/Programing/PragmaTwice/

　Version 11.13
new と delete とそのほか色々

「今回は、 new と delete の残りの部分について見ておきます」
『まず前回の続きからよね』
「そう、 new と delete について。まず、正確に言うと、 new と delete 
にはメモリを確保する機能はありません」
『ええっ！？　だって、確保してるじゃない』
「それは、他の関数を呼び出してるから。 new には」

・メモリを確保する関数を呼び出す。
・コンストラクタを呼び出す。

「っていうふたつの機能があるんです。同じくデストラクタには」

・デストラクタを呼び出す。
・メモリを解放する関数を呼び出す。

「っていう機能があります」
『コンストラクタとデストラクタで順序逆〜』
「だって、解放したあとじゃ変数ないんだから、デストラクタは呼べないで
しょ？」
『あ……そっか、そういえば』
「こういうのも重要だから気をつけてね。で、この new が呼ぶ〈メモリを
確保する関数〉とか delete が呼ぶ〈メモリを解放する関数〉って、実は自
由に変えられるんです」
『好きなのでできるってこと？　たとえば malloc() とか？』
「そういうこと。で、この関数は、 MFC のプログラムなら……あ、見た方
が早いかな」

void NewAndDelete()
{
    // int を作成。
    int *pi = new int;
    // そして解放。
    delete pi;
}

「で、 new してるところにブレークポイントを置いて」
『ビルドして実行、んでステップイン！』

void* AFX_CDECL operator new( /* 略 */ )
{
    return ::operator new( /* 略 */ );
}

『って関数に入った。 operator って確か、クラスに演算子が使えるように
するのだよね』
「そうそう、 Version 5.22 ( No.087 ) や Version 7.09 ( No.129 ) で
やったね。つまり new は演算子のひとつで、こういうふうに書くことで 
new した時にこの関数を呼ぶようにさせることができるってこと」
『あれ、でも new したのって int だったよ。クラスじゃないじゃん』
「そう、これはクラス以外のものに new をした場合のもの。こういう 
operator のは、別にクラスだけに使えるわけじゃないから」
『へー』
「 operator については今度ちゃんと説明するとして、この中でもう一段階 
new を呼んでるでしょ」
『んじゃそっちに入るね。ほい』

void* __cdecl operator new( /* 略 */ )
{
// 略
    return ::operator new(nSize);
// 略
        pResult = _malloc_dbg(nSize, nType, lpszFileName, nLine);
// 略
}

『む、 new と、あと malloc() もどきがある』
「リリースビルドの時は上の方が、デバッグビルドの時には下の方が呼ばれ
ます」
『リリースビルド……ってなんだっけ』
「 Version 3.24 ( No.049 ) と Version 6.18 ( No.118 ) を参照」
『あ、プログラム切り替えるやつね。デバッグするときはデバッグモードに
しないと ASSERT() が使えないとか』
「そうそう。で、リリースビルドの時には普通の new が呼ばれます。これ
はあとで。デバッグモードの時には _malloc_dbg() が呼ばれます。これは
malloc() のデバッグ版」
『デバッグ版？』
「本当は正しい表現じゃないんだけどね。 Version 11.09 ( No.209 ) でメ
モリリークって教えたでしょ」
『メモリを確保しておいて解放しないのだよね』
「そうそう。あのとき、アプリを終了したときにメモリリークがあったって
表示されてたけど、その機能があるのは _malloc_dbg() の方なんです」
『え？　だって、あのときだって普通に malloc() 使ってたよ？』
「実は、 malloc() はデバッグモードだと _malloc_dbg() を呼び出すんで
す」
『あ、そういうこと』
「この _malloc_dbg() については次回に説明するから置いておいて、結局
は new も malloc() 使ってるってこと」
『でもリリースビルドの時は new を使ってるんでしょ？』
「そっちも見ておいた方がいいか。実は、この new の機能は MFC を使っ
てるから、素の new を見るには MFC なしじゃないといけないんです」
『でもここで使ってるんでしょ？』
「でもそれはリリースビルドの時専用だから」
『あ、デバッグモードじゃないからステップインとかできない……』
「そういうこと。そこで、 Version 8.01 ( No.143 ) の、 SDK だけのを
引っ張ってきて」

// 最初に呼ばれる関数です。
int WINAPI WinMain
    ( HINSTANCE p_hInstance
    , HINSTANCE p_hPrevInstance
    , LPSTR p_pchCmdLine
    , int p_iCmdShow
    )
{
    // int を作成。
    int *pi = new int;
    // そして解放。
    delete pi;
// 略
}

「っていうふうにして、 new してるところでブレークポイント置いて」
『なんかかなり回りくどいね……ほい、んでステップイン！』

void * operator new( unsigned int cb )
{
        return _nh_malloc( cb, 1 );
}

『ってのに入ったよ。あ、また malloc() もどき』
「これは素の new なんだけど、この素の new も」
『 malloc() 系を使っている、と』
「そういうこと」
『あ、でもさ、 malloc() 系も API のを使ってるんでしょ？　だったら』
「そう、最終的には、メモリ確保はすべて API で行われてるってこと」
『それって前にも何度かあったよね。ランタイムや MFC とか使ってても、
結局本当のところは API を呼び出してるんだって』
「そういうこと。それが重要だから」
『……ん？　じゃあなんで new と delete なんだっけ』
「コンストラクタとデストラクタ」
『そうだった。 new はコンストラクタを呼んでくれて、 delete はデスト
ラクタを呼んでくれるんだよね』
「その機能があるから、 new と delete は必ず使う必要があるってこと」
『なるほど』
「ただ、 new と delete には、実は大きな問題があるんです」
『げ、なにそれ』
「今まで new で int とかしか作ってこなかったけど、配列の時にはちょっ
と特殊になるんです」

void CreateNewArray()
{
    // このデータが入る領域を確保します。
    const char *const DATA = "あいうえお";

    // まず配列を確保。
    char *pch = new char[strlen( DATA ) + 1];

    // コピーしてから出力。
    strcpy( pch, DATA );
    TRACE( "%s\n", pch );

    // 解放します。
    delete[] pch;
}

『サイズは [] の中で指定するんだ。配列っぽいね』
「うん、キャストも必要ないし、 new の方はわかりやすいんだけどね」
『ってことは delete ……あ、 delete にも [] が付いてる』
「実は、 new[] で配列を確保したら、必ず delete[] で解放しなきゃいけ
ないんです」
『 int 一個とかならいいんだよね、今まで見てると』
「そう、配列の時だけ」
『間違えて [] 付けないで解放しちゃったらどうなるの？』
「そうすると、デストラクタが最初の要素だけしか呼ばれないんです。たと
えば」

void CreateNewCStringArrayBad()
{
    // まず配列を確保。
    CString *pcStr
        = new CString[10];
    // 誤った方法で解放します。
    delete pcStr;
}

「ってすると、残りの９個の CString は」
『デストラクタが呼ばれない……うわ、実行したらエラーになった』
「だから必須ってこと」
『ってことはさ』

malloc() - free()
GlobalAlloc() - GlobalFree()
new - delete
new[] - delete[]

『って、４ペアになるんじゃない？』
「そういうことだね。だから、 new と delete を使う時にも必ずクラスの
中に入れて、コンストラクタとデストラクタで確保と解放がされるようにす
るのがいいかな」
『って、そのコンストラクタとデストラクタを呼べるのが new と delete 
で、なんか鶏が先か玉子が先かっぽい……』

/*
    Preview Next Story!
*/
『なんか、難しくないけどややこしいってゆーか』
「ま、パターンなんだけどね」
『ペアとか？』
「そうそう。いろいろあっても、基本は同じだったり」
『細かいところは違っても、だいたい似たり寄ったりだもんね』
「というわけで次回」
＜ Version 11.14 メモリ確保とデバッグモード ＞
『につづく！』
「ま、とりあえずそういうのに慣れるのがまずは重要かも」
『なんかヤダ』
「げ」


////////////////////////////////////////////////////////////////////
/*                ２００３年７月７日（月）の更新                  */
http://www.kab-studio.com/

・ほとはー１話追加予定
　三人合体ホットハーブに１話追加予定。あーまだ話決めてないや……。


////////////////////////////////////////////////////////////////////
/*                          ご注意！！                            */

・このメールを返信しないでください。
・ご意見・ご希望・ご感想は[チョー普通な日記]よりお送りください。
http://www.kab-studio.com/nikki2/
・購読登録を解除したいときにはこのページで行なってください。
＊http://www.mag2.com/m/0000012198.htm
＊http://www.pubzine.com/detail.asp?id=000590
・解除は自分で行なってください。
・バックナンバーはこれらのページにあります。
http://backno.mag2.com/reader/Back?id=0000012198
http://www.kab-studio.com/Freeware/index.html#MailMagazine


////////////////////////////////////////////////////////////////////
/*
    KAB-studio.h
      Weekly Mail Magazine.
      Written by Kaburaya Seiden.
      http://www.kab-studio.com/Info/MailMagazine/

    (C)KAB-studio 1999 - 2003 ALL RIGHTS RESERVED.
        http://www.kab-studio.com/
        info@kab-studio.com
*/
////////////////////////////////////////////////////////////////////

