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

    KAB-studio.h


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

    送信日： 2003/06/23(Mon) No.212
    配信数： 3040 ( 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.ROM 」も更新。秀丸マクロと
開発メモも含むことになりました。
[ 夏コミ情報 ] 
http://www.kab-studio.biz/Info/Product/C64/


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

2003/06/15 (Sun)
　ほとはー夏コミ版の表紙裏表紙と１ページ。トーンが難しい。 
KAB-studio.ROM 。作業量多い。 500 エラーの不安。

2003/06/16 (Mon)
　疲労感最高レベル。土日のがかなり負担？　風邪かも？　チャロンはアル
ティメットモードを開始。特定ミッション以外はなんとかなりそう。

2003/06/17 (Tue)
　会社休む。チャロンはアルティメットをクリアして白虹騎士ゲット。やっ
ぱ強い。魔法をコンピューターっぽいのはあれだなぁ。そしてアセンブラと
か COM とか。

2003/06/18 (Wed)
　がーっとお仕事。 Eclipse 始めました。便利そうだけど使えない……。
ほとはー夏コミ版をちょっと描く。つか本編が。 Never7 はパスして 
Ever17 とゆめりあを。そして正規表現。そして import とタイプライブラ
リ。

2003/06/19 (Thu)
　お仕事はフツーなんで書くことない。ねこのしっぽ様へは行かず。ほと
はー本編が滞ってる……。メロンブックスのポイントカード。かぶスタをぐ
ぐる。ホットハーブでぐぐる。そして装飾名。

2003/06/20 (Fri)
　お仕事は仕様を詰めつつ。シャンゼリオンＤＶＤボックスとゆめりあ購
入。どっちもいい感じ。 500 エラー発生も特になし？　そして報われる？

2003/06/21 (Sat)
　午前中はぐだー。午後にほとはー。色温度がおかしい？　かぶスタ引っ越
しは８月４日に、一度にする予定。 Java で置換。移転のお知らせとか。
アーカイブのアクセスログが取れる。ぴちぴちピッチは最終回まぢか？　
ゆめりあがいい感じ。そして多重定義。


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

■　第七章　告白　−１３−

　霧の中を、ふたりは駆けていく。
　乳白色の霧を切り裂いて、早朝の森を昨日のように駆けていく。
　昨日のように。
　大丈夫、感づかれていない。きっと。
　穂香も騙せ通せているかどうか自信がないながらも、自分は平静を装うこ
とができていると舞は感じていた。
「あとどのくらい？」
「おまえ、それもう何回目だ？」
　あ。
「もうすぐだって聞かされてたら、もうすぐだと思っちゃうわよ。さっきよ
りペースは上げてるんだし」
「確かにな。えーっと」
　雅樹は周りを見渡す。
『消え去れ！』
　舞が走りつつ両腕を広げれば、周囲１００メートルの霧が晴れた。
「サンキュ。……おっと」
　雅樹は立ち止まる。
「道間違えた」
「あんたねぇ……」
「でも、到着だ」
　え？　という舞を置いて、雅樹は別の方角へと走っていく。雅樹が入って
いった洞窟へと、後を追って入る。
「！！」
　舞は思わず立ち止まった。
　強い違和感、同時に既視感。
　これ、この感じ……そうだ、碧き泉だ。全然違うのに……似てる。
　洞窟の先に光が見える。そこを抜けると、岩に囲まれた空間が現れ、畑の
中に家が数えられる数、建っていた。
「ここが……」
「俺の故郷、朱き泉の村だ」
                                                        (第七章　完)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
『夏コミのが出そろったみたいね』
「マンガ１冊と CD-ROM ひとつ、だね」
『値段が雲泥の差ね……』
「３００円と１２００円、４倍違うね」
『なんかさー、 CD-ROM 版だけ売ればいいんじゃないの？』
「コミケで？」
『う”……』
「それに、こういうデータはネットだとフリーってイメージ強いし」
『こういうときにこういう形でないと売れない？』
「かもね」
『そういえば、結局通販の方はどうなるの？』
「まだ検討中」
『フツーに通販するしかないんじゃない？』
「やっぱりそうなるのかな……」
http://www.kab-studio.biz/Info/Product/C64/
_______________________________________________________________[KCM]


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

　Version 11.12
new と delete とコンストラクタとデストラクタ

「前回はコンストラクタとデストラクタについて見てみました」
『作られるときと削除されるときとでペアになるから便利なんだったよね』
「そのとき一緒に、 CString は new と delete でメモリの確保と解放をす
るって説明しました」
『前にちょっと教えてもらったことあるよね』
「 Version 4.13 ( No.063 ) とか Version 5.22 ( No.087 ) とか 
Version 9.08 ( No.169 ) とかだね」
『…… malloc() とかより全然使ってるじゃん』
「それは、 new と delete の方が使いやすいから。前に malloc() を使っ
たときって、文字列を確保したよね」
『うん、 char の配列だよね』
「じゃあ今度は、 malloc() で int を確保してみます」

void CreateInt()
{
    // int のサイズ分だけメモリを確保。
    int *pi = (int *)malloc( sizeof( int ) );

    // 使います。
    *pi = 100;
    TRACE( "%d\n", *pi );
    // 100

    // そして解放。
    free( pi );
}

『ん？　サイズ指定するのに sizeof() 使ってる』
「 int みたいにサイズが１バイトより大きいものは sizeof でサイズを取
得してそれを使います」
『なんで char はいいの？』
「 char は１バイトだからね。ただ、正確には」

    int *pi = (int *)malloc
        ( sizeof( char ) * ( strlen( DATA ) + 1 ) 
        );

「ってする方がいいかな」
『 char を sizeof してる』
「 malloc() の引数に渡す値は〈何バイト確保するか〉。だから malloc() 
には【変数のサイズ * 要素の数】を渡すのが基本。 sizeof( char ) は 1 
だから省略できるっていうだけの話」
『でも最初の例だと * 要素数ってないよね』
「それは変数が１個だけ、つまり配列として確保しないから。だから、たと
えば int[4] みたいな配列と同じように確保したい場合には」

    int *pi = (int *)malloc( sizeof( int ) * 4 );

「ってします」
『つまり、普通の変数なら * 4 とかはいらなくて、配列なら * 4 ってして
要素数指定するってことね』
「そういうこと。言い換えると、メモリ上は、普通の変数もポインタも関係
ないってこと」
『？』
「 malloc() は、確保するときに普通の変数か、配列か、なんて全然気にし
ないで取ってくるから。たとえば、最初の例の」

    int *pi = (int *)malloc( sizeof( int ) );

「って確保したポインタを、普通の１個の変数として使うなら」

    *pi = 100;

「っていうふうに使うでしょ。でもこれを、配列のように使う事もできるっ
てこと。たとえば」

    pi[0] = 100;

『ってゆーか、ポインタだからむしろこっちの方が自然な気がする……』
「そうだね、あまり *pi って使い方しないかも。それでも、普通の変数と
しても使えるんだってことは忘れないで」
『はーい』
「で、話がそれたけど、これと同じ事を new と delete でしてみます」

void CreateIntWithNew()
{
    // int を作成。
    int *pi = new int;

    // 使います。
    *pi = 100;
    TRACE( "%d\n", *pi );
    // 100

    // そして解放。
    delete pi;
}

『あれ？　サイズの指定がない！』
「そう、 new でのメモリの確保は」

    int *pi = new int;

「ってします。ここではサイズを指定しません。って言うよりも、実は〈メ
モリを確保する〉って表現自体が間違い」
『どゆこと？』
「 malloc() や API を使った時って、メモリをまず確保して、それを好き
な型のポインタにキャストして使ってたでしょ」
『キャストって』

    int *pi = (int *)malloc( sizeof( int ) );

『だと (int *) のところだよね』
「そうそう。これはつまり〈確保したメモリ領域を int として使います
よ〉って宣言しているだけで、実際にそのメモリ領域はどんな型として
使ってもいいんです」
『前にもそんなこと言ってたね』
「 Version 4.11 ( No.061 ) で言ったよね、メモリの中に〈変数の区切り
はない〉って。確保したメモリをどう使おうと自由なんです」
『なるほどねー。で？』
「で、 new は違うってこと。もう一度見てみて」

    int *pi = new int;

「こうやって【 new 型】ってすると、その型の変数が作られて、そのアド
レスが返ってきます」
『作られるってどこに？』
「メモリの中」
『……それのどこが malloc() と違うの？』
「まず、キャストしてないでしょ」
『うん、それはわかってる』
「ってことは、基本的にこれは int として使ってってこと。確保した領域
が int のサイズ分ってのは確かなんだけど、それをたとえば char[4] みた
いな使い方はしないでってこと」
『つまり int 専用の領域ですよ、ってこと？』
「そういうこと。つまり、 new は〈指定された変数を作る〉機能があるん
です」
『 malloc() は確保だけして、 new は変数を作る……って言っても、やっ
ぱりメモリを確保して返すだけじゃないの？』
「で、実はもうひとつとっても重要な機能が new と delete にはあるんで
す。たとえば、 CString を作ってみます」

void CreateCStringWithNew()
{
    // CString を作成。
    CString *pcStr = new CString;

    // 使います。
    *pcStr = "あいうえお";
    TRACE( "%s\n", *pcStr );
    // あいうえお

    // そして解放。
    delete pcStr;
}

『だいたい同じ。ってゆーか普通にできてるよね……なんか変なところある
の？』
「ううん、ないよ。むしろ問題があるのは、次の malloc() を使って確保す
る方」

void CannotCreateCStringWithMalloc()
{
    // CString のサイズだけ確保。
    CString *pcStr 
        = (CString *)malloc( sizeof( CString ) );

    // 使います。
    *pcStr = "あいうえお";
    TRACE( "%s\n", *pcStr );
    // アクセス違反発生！！

    // そして解放。
    free( pcStr );
}

『げ、こっちはエラー出た！！』
「なぜそうなるかっていうと、 malloc() はコンストラクタを呼んでくれな
いから」
『コンストラクタって、変数が作られるときに呼ばれるんだよね』
「そう。でも、この例だと、変数が作られてないよね」
『作られてない？　だって malloc() ……あ！　もしかして malloc() って
メモリ確保してるだけだから、ってこと！？』
「そういうこと。 malloc() は CString が入るサイズだけメモリ領域を確
保して、はいこれを使ってくださいってポインタを返すだけ。ってことは、
そこは CString が入る領域はあるんだけど、実際には」
『 CString が入ってない……』
「そういうことになるかな。で、 new にはコンストラクタを、 delete に
はデストラクタを呼ぶ機能があって、こっちなら」
『ちゃんと CString って変数が作られる……変数が作られる、って意味は
そういうことなのね』
「だから、 Version 11.10 ( No.210 ) で言ったように、結局は new と 
delete を使わなくちゃいけないんです」
『でも、 malloc() 使ってるサンプルコードって多いよね』
「もちろん絶対じゃないよ。クラスじゃなければコンストラクタもデストラ
クタもないから」
『 malloc() でも問題ない、と』
「それに、特殊な方法で確保するときには」
『 API のを使わなきゃいけない？』
「そういうこと。それに、実は new と delete は、それ自身ではメモリを
確保してないんです」
『へ？』
「というわけで次回に続く！」

/*
    Preview Next Story!
*/
『なるほどね、コンストラクタとデストラクタ』
「それに new と delete 」
『このふたつは密接に結びついてるわけね』
「っていうより、まずコンストラクタとデストラクタを作りたくて」
『でも malloc() だと呼べないから』
「 new と delete を作った」
『ってことなのね』
「というわけで次回」
＜ Version 11.13 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
*/
////////////////////////////////////////////////////////////////////

