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

    KAB-studio.h


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

    送信日： 2003/06/16(Mon) No.211
    配信数： 3160 ( 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/

・KAB-studio.h 縮刷版更新
　KAB-studio.h が２１０号になるので縮刷版を更新します。ダウンロード
はダウンロードルームにて。
[ ダウンロードルーム ]
http://www.kab-studio.com/Freeware/index.html#MailMagazine

・夏コミ情報を追加！
　夏コミ情報ページに「 KAB-studio.ROM 」についての情報を追加します。
頒布物のひとつ、プログラマー向けです。
[ 夏コミ情報 ] 
http://www.kab-studio.biz/Info/Product/C64/


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

2003/06/08 (Sun)
　ほとはー夏コミ版描いてない……。ねこのしっぽ様。かぶスタバックアッ
プ。縮刷版。移行っていっぺんにやった方がいいかも。ほとはー、もう少し
近未来な感じが良かった？　テレビはＥＲがいい感じ。

2003/06/09 (Mon)
　ダイモンワームが倒せない！！　Java 開発再び。今月も楽そう。ほと
はーのヒット数に変化が。

2003/06/10 (Tue)
　チャロンマーズ、 EP7-4 まで到達。冷静さが大事。プレステ２のコント
ローラーを買い直し。すてプリ見逃す……。そして Curl とか。そして
寸志。

2003/06/11 (Wed)
　引きつづき Java 。他の人のコード。テムジン 747J/V が鬼のように強
い。 KAB-studio.ROM の再販をどうするか。そして JS とか ASP とか。

2003/06/12 (Thu)
　まず昨日の問題を解決して、そして引きつづき Java 。チャロンははまる
とあっという間。ぱぱっとイラスト。そして MSDN ライセンス。

2003/06/13 (Fri)
　引きつづき Java 。家でアップロード。今度の土日はほとはー夏コミ版を
がんばる。そして IIS と VB 。そして JScript.Net とか。

2003/06/14 (Sat)
　ほとはー夏コミ版描いてない。 Tomcat でパスワードロックができない。
Apache 経由の方がいい？　そして大安売り。


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

■　第七章　告白　−１２−

『舞は……知らないんだよな、手に掛けようとしたこと』
　え？
『あのとき、結白さんが俺を殺ってくれたから、俺は舞の前で倒れることが
できた。もしそうなってなかったら、俺は結白さんだけじゃなく、舞
も……』
　あのとき。
　目の前にいた雅樹は、私を殺そうとしていた……ううん、きっと私だけ
じゃなく、視界に入ったすべての人を、殺そうとしてたんだ。
『今思い出しても最高だぜ！？　ずーっと現れなかったおまえが、霧の中で
ピンチになったときに現れて、右！って。振り向いたら後ろからがつん、だ
もんなぁ』
　雅樹はけらけらと笑っている。
『あんときのおまえの機転がなかったら、今頃は、ってことだ。感謝して
る』
　雅樹の目が薄く伏せられ、刀をみつめる。
『俺はこれからも、こいつでやっていかなきゃならない。舞を、結白さんを
護りたい。でもそれは、護りたいって気持ちなんだ。そして俺にとって必要
なのは』
　雅樹は左側へと真摯な瞳を向ける。
『おまえなんだ』
　滴が、小川に落ちる。
『もう俺は、あの頃には絶対に戻りたくないんだ。たとえそれが自分の能力
を妨げるものになるとしても……でも』
　再び刀を見つめる。
『護ろうとすれば、相手が強大なら、全力を出すしかない。そのとき俺を止
められる、俺を導いていけるのはおまえだけなんだ。いや、おまえに頼みた
い。俺の……俺の一部になって欲しいんだ』
　雅樹は答えを待った。
『……かもな。でもいいさ、それでもな』
　雅樹の顔が笑みに変わる。
『だいたいよ、俺はおまえが好きだって言ってんだぜ？　贅沢言うなって』
　少し間が開いて、笑い声があがる。
『じゃ、始めっとすっか』
　涙に濡れながら、何を？　とふと疑問に思う中、雅樹はやや前屈みにな
り、右手を……
「！！！！！！」
　舞は急いで手を引き抜き、小川から出、大きな岩の影に隠れた。
　止めようもなく息が荒い。真っ赤な顔は先の涙を蒸発させていた。驚いて
いた表情は、一転、しかめっ面に変わり、
「バカァ！！」
　と強く叫んだ。
                                                              (続く)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
『なんかいっそがしそうねー』
「コミケのおしらせと引っ越しが重なってるからね」
『それって重なっちゃうものなの？』
「漫画って、奥付ってあるでしょ」
『出版社とか描いた人とか書いてあるあれ？』
「そう。そこにはやっぱり新しい URL を載せた方がいいだろうから」
『そか、それまでに引っ越しは終えないといけないわけね』
「そういうこと」
『でも、なんか移行自体は進んでないよね』
「一気にやった方がいいって話もあるし」
『それはそれで大変よね』
「かもね……」
http://www.kab-studio.com/
_______________________________________________________________[KCM]


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

　Version 11.11
コンストラクタとデストラクタ

「前回は、色々な API を使ってメモリ確保してみました」
『３種類くらいあるんだよね。それで、組み合わせ変えちゃったらまずいん
だよね』
「そう、確保する関数と解放する関数はペアになっていて、それを間違える
とエラーになっちゃいます」
『つまりそれはかなり注意してしなきゃいけないってことね』
「でも、難しい部分もあるんです」
『難しい？』
「 malloc() とかを使って取得したポインタって、長く使う事があるんで
す。たとえば戻りとして返したりとか」

char *ReturnPointer( const char *p_pch )
{
    return (char *)malloc( strlen( p_pch ) );
}

『文字列受け取って、その長さ分だけ確保して返す、って関数だね』
「この関数から返されたポインタは当然解放しなきゃいけないんだけど、で
も、この関数の中を見ないと何で解放すればいいのかわからないでしょ」
『つまり、こうやって関数見て、 malloc() で確保してるってわからないと
free() で解放すればいい、ってわからないってこと？』
「そういうこと。このポインタだけ処理するならいいんだけど、こんな似た
ような関数がいっぱいあって、それぞれで別の関数で確保してたら」
『どのポインタがどれで解放したかってわからない、と』
「で、こういう時にはクラスの【コンストラクタ】と【デストラクタ】とい
う機能を使います」
『コンストラクタってやったよね、前に』
「 Version 7.08 ( No.128 ) でね。コンストラクタは変数が作られた時に
呼ばれる関数がコンストラクタ。で、変数がなくなるときに呼ばれるのが
デストラクタ」
『変数がなくなるとき？』
「関数から出るときに変数がなくなるでしょ」
『……質問！』
「はい火美ちゃん」
『さっきの例を見ると、 malloc() とかで確保したポインタはなくならない
ってこと？』
「そういうこと。言い換えると、普通の変数は自動で作られて自動で解放さ
れるってことかな」
『そういうことになるのか……』
「たとえばね」

char *ReturnPointer2( const char *p_pch )
{
    char *pchRet = (char *)malloc( strlen( p_pch ) );
    return pchRet;
}

「ってした場合。 pchRet は普通の変数だから、この関数から抜けるとなく
なります」
『でも malloc() で確保した方はなくならない、と』
「 pchRet はアドレスを入れる変数ってだけで、そのアドレスが指すメモリ
領域とは無関係だからね」
『なんとなくわかる……と思う』
「 malloc() だから難しいのかな」

void DoublePointer()
{
    char pch[128];
    char *pchRet = pch;
}

『あ、 malloc() じゃなくて普通の変数になった』
「この関数から抜けたら pch はなくなるでしょ。もし pchRet がなくなる
ときに、そのポインタが指してる pch もなくなしちゃうとしたら」
『二重でなくなっちゃうからあり得ないってことね』
「そういうこと。で、この pch の方は普通の変数だからなくなるでしょ、
malloc() と違って」
『うん』
「ってことは、この〈なくなるとき〉にデストラクタが呼ばれるってこと。
実際にそれを CString で確認してみます」

void CreateCString()
{
    CString str = "あいうえお";
}

『ただ CString 作るだけだね』
「この作る所でブレークポイント置いて」
『ほい』
「で、実行してそこで止めてから、ステップインするとコンストラクタに入
れるから」
『あ、そうやれば入れるんだ』
「コンストラクタはこんな関数になってます」

CString::CString(LPCTSTR lpsz)
{
// 略。
}

『懐かしい、クラスのメンバ関数だね』
「コンストラクタは普通のメンバ関数と違って、戻り値がなくて、関数名が
クラス名と同じです」
『あ、ホントだ』
「 MFC のコードだからそのまま載せられないけど、中で AllocBuffer() 
ってメンバ関数を呼び出してるでしょ。これでメモリを確保してます」
『確保ってなにでしてるの？　GlobalAlloc() とか？』
「ううん、次回教える new っていうのを使ってます」
『そういえばランタイムと API の他にそういうのもあったね』
「ランタイムや API とはちょっと違うから別に説明しようと思って。これ
は次回まで取っておくとして」
『 CString はよくわかんないけど new っていうので確保してるとして？』
「 new で確保したメモリは、 delete っていうので解放する必要がありま
す」
『 GlobalAlloc() の GlobalFree() みたいな感じね』
「で、この解放を str がなくなるときに自動的にする仕組みがあるんで
す」
『自動的に？』
「さっき、デバッグモードでコンストラクタの中に入った後、一度ステップ
アウトして、次にステップインして」
『ほい。あ、なんかの関数に入った』

CString::~CString()
{
// 略。
}

「この、コンストラクタに ~ が付いた、変数がなくなるときに自動的に呼
ばれるメンバ関数を【デストラクタ】って言います」
『お、ここで出てくるんだ。っていうか、ホントにコンストラクタの逆だ
ね』
「うん、コンストラクタとデストラクタも対ってことになるね。で、このデ
ストラクタでは FreeData() を呼んでて」
『そっちは AllocBuffer() の逆でメモリ解放するわけね』
「このメンバ関数の中では delete で解放してるから」
『 new で確保したのを delete で解放、だから大丈夫なわけね』
「そういうこと。まとめると」

１： CString を作る。
２：コンストラクタが呼ばれて自動的にメモリを確保。
３： CSting を使う。
４：関数から抜けて CString がなくなる。
５：デストラクタが呼ばれて自動的にメモリを解放。

「これが自動的だから、確保と解放が対になってて、だから new で確保し
たのを確実に delete で解放できるんです」
『確実に？』
「変な使い方しない限り、確実に」
『変な使い方？』
「文字列を出力するときとかに中のポインタを取得できるわけだから、それ
を free() したりとか」
『げ。ホントに変な使い方だ……』
「まぁそういうのはわざとしない限り大丈夫だとは思うから」
『確保と解放は１対１、になるわけね』
「それに、コンストラクタとデストラクタを使うと他にもメリットがあるん
です」
『メリット？』
「特にデストラクタを使うメリットが多いかな。まず、 malloc() とかの関
数だけの処理だと、解放が面倒なんです。たとえば」

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

    // まず確保。
    char *pch = (char *)malloc( strlen( DATA ) + 1 );

    // たとえばここで何かエラーチェックをします。
    if( 0 == 0 )
    {
        // エラーが発生したらここに来て関数から抜ける場合、
        // ここでも free() する必要があります。
        free( pch );
        return;
    }

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

    // 解放します。
    free( pch );
}

「みたいに、途中で関数を抜ける場合」
『げ、その都度 free() しなきゃいけないんだ』
「クラスなら、関数から抜けるときに自動的にデストラクタが呼ばれるか
ら」
『そういう心配しなくていいってわけね』
「それと、たとえば」

    free( pch );
    free( pch );

「っていうふうに２度解放しちゃったりするとエラーになります」
『げげ。これもデストラクタを使えば気にしなくていいんだもんね』
「動的に確保したメモリみたいに、扱いが難しいものはクラスに入れると楽
になるから。クラスのことはこれから少しずつ教えていくけど、そういった
メリットを憶えておいて」
『はーい』

/*
    Preview Next Story!
*/
『今回、ちょっと難しい……』
「 new とか delete とか、まだちゃんとしてないのを使ってるしね」
『来週教えてくれるんだっけ』
「うん」
『じゃあ new と delete を先に教えてくれればよかったのに』
「ところがそうはいかないんです」
『へ？』
「というわけで次回」
＜ Version 11.12 new と delete とコンストラクタとデストラクタ ＞
『につづく！』
「というわけで、コンストラクタとかも関係してくるんです」
『またややこしくなりそう……』


////////////////////////////////////////////////////////////////////
/*                ２００３年６月２３日（月）の更新                */
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
*/
////////////////////////////////////////////////////////////////////

