////////////////////////////////////////////////////////////////////
５０歳からでも簡単に超ゴルフ上達できる秘密の方法を
知りたい方は、こちらを今すぐクリックして下さい！
http://af1.mag2.com/m/af/0000008658/001/s00000004997001/011
////////////////////////////////////////////////////////////////////
/*

    KAB-studio.h


    (C)KAB-studio 1999 - 2006 ALL RIGHTS RESERVED.
        http://www.kab-studio.biz/
        info@mail.kab-studio.biz

    送信日： 2006/10/23(Mon) No.379
    配信数： 1709
    発行元： まぐまぐ ( URL: http://www.mag2.com/  ID: 0000012198 )
*/
////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////
// NEW!!
http://www.kab-studio.biz/index.html

2006/10/23 (Mon)
　ほとはー外伝３にP.76を追加！
[ 三人合体ホットハーブ 外伝３ 【ワタシ の キロク】 ]
http://www.kab-studio.biz/Comic/HotHerbA3/index.html

2006/10/23 (Mon)
　#pragma twice ホームページ版にアーカイブ追加！
17.06 継承と代入
17.07 継承と代入・ポインタの場合
[ #pragma twice ]
http://www.kab-studio.biz/Programing/PragmaTwice/index.html


////////////////////////////////////////////////////////////////////
// ちょお普通な日記
http://www.kab-studio.biz/nikki2/index.html

2006/10/15 (Sun)
　１１時半起き。定期更新とアニメ感想書きとFFVA。プールはお休み。この
一週間ダメダメだ。

2006/10/16 (Mon)
　１０時半起き。早く寝れてないのがいけない。ダイエットもいけない。

2006/10/17 (Tue)
　無理矢理徹夜。でも仮眠で意味なし。洗濯とか食材買いとか。夕方に横浜
まで散歩。プリンタのインクとかコミックス購入。

2006/10/18 (Wed)
　１０時半起き。今日も何もしてない。「やりたいこと」優先で行かないと。
夜にプール。ファイナルファンタジーVアドバンスクリア。

2006/10/19 (Thu)
　１０時起き。目覚まし総動員で。はてなプレゼントイラスト。夕方まで
風雅、舞い。夜はプール。

2006/10/20 (Fri)
　９時半起き。ほとはー外伝３描き。夕方にうたわれるものらじおまとめ聴
き。来週おしごと入りそう。夜にプール。

2006/10/21 (Sat)
　完全駄目な日。何もやる気なし。サッカーと日本シリーズ観て終わり。


////////////////////////////////////////////////////////////////////
// かぶろぐ。
http://d.hatena.ne.jp/kab_studio/

2006/10/15 (Sun)
http://d.hatena.ne.jp/kab_studio/20061015
起きたー。
[KAB-studio]ぷらとわ追加。
[KAB-studio][ほとはー]ほとはー外伝３ P.75
[FFVA]まったり石版集め。
[アニメ]「牙」 第29話「すれ違う友情」
[アニメ]おねがいマイメロディ〜くるくるシャッフル！〜 第29話「パティシエになれたらイイナ！」
[アニメ]乙女はお姉さまに恋してる 第2話「けせない消しゴム」
[アニメ]Bartender 第1話「バーテンダー」(新)
[アニメ]くじびきアンバランス 第2話「やくそくをまもれないとだめだ。2点」
[アニメ]Gift 〜eternal rainbow〜 第2話「帰ってきた妹」

2006/10/16 (Mon)
http://d.hatena.ne.jp/kab_studio/20061016
起きたけどー
[水泳ダイエット]10月6回目
[link]PLAYSTATION 3(60GB) Amazonで（一瞬だけ）予約開始。
20GB版は？ 
[アニメ]金色のコルダ 第3話「匿名希望のショパン」
[アニメ]夜明け前より瑠璃色な Crescent Love 第2話「お姫様は優等生！」
[アニメ]ギャラクシーエンジェる〜ん 第3話「伝説！食材サバイバる〜ん」

2006/10/17 (Tue)
http://d.hatena.ne.jp/kab_studio/20061017
起き……てる！？
あああ
[装備]W-ZERO3[es]ファームウェアバージョンアップ
[link]Amazonがのだめ一色
[link]Fate/stay night CRYSTAL JACKET SET for iPod nano 
横浜まで散歩してきた。
[食]GOLDRUSH ゴールドラッシュカレー
[買]買ってきた本とか。
[アニメ]BLACK BLOOD BROTHERS 第3話「九龍の血統」
[アニメ]N・H・Kにようこそ！ 第15話「ファンタジーにようこそ！」
[アニメ]Pumpkin Scissors 第3話「其は貴きものなりて」

2006/10/18 (Wed)
http://d.hatena.ne.jp/kab_studio/20061018
起き……
[水泳ダイエット]10月7回目
[FFVA]とりあえずクリア。
[アニメ]DEATH NOTE 第3話「取引」
[アニメ]ブラックラグーン 第15話「Swan Song at Dawn」
[アニメ]ネギま！？ 第3話「ほ〜仮契約カードはそうやって使うのか」

2006/10/19 (Thu)
http://d.hatena.ne.jp/kab_studio/20061019
起きた……
[絵]健康&美容のセルフドクターネットさん,「からだ環境青汁」試したい！
[水泳ダイエット]10月8回目
[きらら]まんがタイムきららMAX 2006年12月号
[アニメ]武装錬金 第3話「キミは少し強くなった」

2006/10/20 (Fri)
http://d.hatena.ne.jp/kab_studio/20061020
起きた。
[link]マジアカファンブック増刷？
[link]横浜西口「ハマボール」が閉鎖−老朽化で建て替えへ
[水泳ダイエット]10月9回目
[link]ITmedia D LifeStyle：セグウェイ、国内価格は88万2500円
[アニメ]ザ・サード 〜蒼い瞳の少女〜 第23話「鋼の谷へ」
[アニメ]あさっての方向。 第3話「あたらしい生活」
[アニメ]すもももももも〜地上最強のヨメ〜 第3話「動物園でつかまえて」

2006/10/21 (Sat)
http://d.hatena.ne.jp/kab_studio/20061021
起きた。
[link]膨張式水没防止ブイ
[link]ラジオCD「うたわれるものらじお」 Vol.1　発売決定!!
[アニメ]彩雲国物語 第25話「他人のそら似」
[アニメ]おとぎ銃士 赤ずきん 第17話「灰の降る町」
[アニメ]ふしぎ星の☆ふたご姫 Gyu! 第30話「復活☆暗黒のプリンス」
[アニメ]コードギアス 反逆のルルーシュ 第3話「偽りのクラスメイト」


////////////////////////////////////////////////////////////////////
// Ajaxでエロゲーを作るブログ
http://d.hatena.ne.jp/AjaxEroge/

（今週はお休みです）


////////////////////////////////////////////////////////////////////
// 風雅、舞い
http://www.kab-studio.biz/Novel/Fuga/index.html

■　第十五章　濁る澱み、清らかな血溜り　−７−

「えーっと、ここでいいのかな」
　メモ帳に書き殴られた地図を頼りに、舞と少年は古びた温泉宿を探し当て
る。木の柱、白い漆喰、少し昔の家屋、その軒先といった門構えだった。
「なんだか……汚い」
「えー、そっかな」
　温室育ちの少年にとっては抵抗のあるその雰囲気も、碧き泉にある実家を
思い浮かべた舞にとっては、さほど抵抗のないものだった。
「ここ、このあたりで一番いいとこって聞いてるし、せっかく予約してくれ
たんだから」
　その予約をした智子は、トラックで留守番をしている。
『このカーゴの中の機材や情報がいくらすると思ってるの！！　こんなの道
に放置していったら盗んでくれって言ってるようなもんでしょ！？』
　と言って、頑なに離れようとはしなかった。
　だから、舞が少年を連れてきている。
「それに、キミが温泉入りたいって言ったんでしょ」
「そうだけど……」
　不満そうな表情を浮かべるが、かといって嫌というわけでもない。
「…………」
　最近の少年は、年相応の表情を見せてくれる、そう舞は感じた。
　リシュネもそうだったが、会ったばかりの時は非常に大人びていて、子供
らしさを感じさせない、隙のない雰囲気を漂わせていた。だが、最近は少し
丸く、人間くさくなってきている。
　……両親のこととかあるからなのかな、それともこれが普通なのかな……。
「ま、とりあえず入ろ」
　舞は引き戸に手を掛けた。
                                                              (続く)

////////////////////////////////////////////////////////////////////
// JavaA2Z
http://www.kab-studio.biz/Programing/JavaA2Z/index.html

■追加・更新単語

（今週の追加はありません）


////////////////////////////////////////////////////////////////////
５０歳からでも簡単に超ゴルフ上達できる秘密の方法を
知りたい方は、こちらを今すぐクリックして下さい！
http://af1.mag2.com/m/af/0000008658/001/s00000004997001/011
////////////////////////////////////////////////////////////////////
// #pragma twice
http://www.kab-studio.biz/Programing/PragmaTwice/index.html

　Version 17.24
スマートポインタと参照カウンター

「今回は前回に引き続きスマートポインタについて説明します」
『この前はプログラムだけだったもんね』
「まず、スマートポインタの基本方針は以下の6つ」

・スマートポインタはクラス。
・中に、実際に使用するクラスのポインタを持つ。
・スマートポインタはポインタではなく普通の変数として使う。
・【参照カウンター】へのポインタをメンバ変数に持つ。
・複製ができたら参照カウンターを増やし、変数が消えたら減らす。
・参照カウンターがゼロになったときだけ解放する。

「これを踏まえて、スマートポインタについて見ていきます」
『はーい』
「まず、スマートポインタはクラスです」

・スマートポインタはクラス。

「なので、クラスとして作ります」

// スマートポインタクラス。
class CSmartPointer

「次に、対象のポインタをメンバ変数として持ちます」

・中に、実際に使用するクラスのポインタを持つ。

「これが以下の行です」

    // これが対象のポインタ。
    CPrinter *m_pcPrinter;

『 CPrinter クラスのポインタってことはこれが Version 17.20 ( No.375 ) 
の pcPrinter 変数にあたるってことね』
「そういうこと。で、このポインタをメンバ変数として持つ代わりに、
CSmartPointer クラスの変数はポインタでは扱いません」

・スマートポインタはポインタではなく普通の変数として使う。

「これが以下の部分」

CSmartPointer GetPrinterInstance( int p_iFlag )
{
    // フラグによって出力を変更します。
    if( p_iFlag == DEBUG_PRINTER )
    {
        CSmartPointer cSmartPointer( new CDebugPrinter() );
        return cSmartPointer;
    }
    // else
    CSmartPointer cSmartPointer( new CDlgPrinter() );
    return cSmartPointer;
}

『ホントだ、 GetPrinterInstance() 関数の戻り値がポインタじゃない』
「ポインタを使わない最大の理由は、変数のコピーをしたり変数がなくなる
ときにメンバ関数を呼び出すようにするため」
『あ、だからこれだけメンバ関数があるんだ』

CSmartPointer( const CSmartPointer &p_rcSmartPointer )
~CSmartPointer()
CSmartPointer &operator =( const CSmartPointer &p_rcSmartPointer )

『コピーコンストラクタにデストラクタ、あと = 演算子のオーバーロード
だね』
「ポインタだとこういったメンバ関数が呼び出されないからね」
『呼び出して何をするの？』
「【参照カウンター】っていうのを増やしたり減らしたりします」
『さんしょうかうんたー？』
「そう。まず注意して欲しいのは、この参照と Version 3.22 ( No.047 ) 
の参照はまったく別だから注意してね」
『ってことは、一般的な意味でのさんしょー、ってこと？』
「そういうこと。つまり参照カウンターは〈指し示している数〉、もっと
具体的に言うと〈ある変数のアドレスを格納しているポインタの数〉を数え
るカウンターということです」
『ポインタの数！？』
「たとえば」

    int i;

    int *pi1 = &i;
    int *pi2 = &i;
    int *pi3 = &i;

「この i 変数のアドレスは、 pi1 、 pi2 、 pi3 の3つのポインタが持っ
ています。これは〈 i 変数の参照数は 3 〉ということ」
『つまり参照カウンター = 3 、って感じ？』
「そういうこと！」
『でもこれを数えるとどういう意味があるの？』
「この意味が出てくるのは、 new で変数を作ったとき。たとえば、以下の
ように今度は変数を new で作ったとします」

    int *pi1 = new int;
    int *pi2 = pi1;
    int *pi3 = pi1;

「この new で作った変数を delete するタイミングは、たったひとつ」

・pi1 、 pi2 、 pi3 の3つのポインタがなくなったとき。

「です」
『つまり、アドレス持ってるポインタが全部なくなった時に delete すれば
いいってことね』
「そこで、こういうことができれば適切なタイミングで delete ができる、
ということになります。つまり」

・アドレスを持つポインタの個数（＝参照カウンター）を常に把握して
　おいて、その個数がゼロになったら delete する。

「ができればいいってこと」
『なるほど、 new int して返されたアドレスを持つポインタを数えておい
て、ぜーんぶなくなったら delete する……って、そんなことホントにでき
るの！？』
「もちろん。そのためのスマートポインタだからね。まず重要なのは、今み
たいにポインタのコピーをしたら、ポインタの個数を数えることはできない
っていう点」
『ポインタのコピーだと、さっきのメンバ関数が呼ばれないから？』
「そういうこと。ポインタのコピーはあくまでアドレスっていう整数値を
コピーするだけだから、 = 演算子のオーバーロード関数とかを作っておい
ても呼ばれないんです」
『そのために、普通の変数にする！』
「ってこと。そうすることで各種メンバ関数が呼ばれるようになるから。
それをひとつずつ見ていきます。まずはコンストラクタから」

        CSmartPointer cSmartPointer( new CDebugPrinter() );

『普通に CSmartPointer クラスの変数を作って、そこに new で作った
CDebugPrinter クラスの変数のアドレス渡してる、ってことね』
「ここで呼ばれるコンストラクタは以下のメンバ関数です」

    // コンストラクタでポインタを渡します。
    CSmartPointer( CPrinter *p_pcPrinter )
        : m_pcPrinter( p_pcPrinter )  ← 引数をメンバ変数にセット。
        , m_piRefCounter( new int )   ← 参照カウンターをセット。
    {
        // 参照カウンターに 1 をセットします。
        *m_piRefCounter = 1;
    }

「まず引数で渡されたアドレスを m_pcPrinter メンバ変数にセットしま
す。次に参照カウンターを作成します。参照カウンターは int 型変数を new 
で作って m_piRefCounter にセットします」

                             ↓参照カウンターを new で作成。
        , m_piRefCounter( new int )
              ↑そのアドレスをメンバ変数にセット。

『え、参照カウンターって new で作るの！？』
「そう、なぜかっていうと参照カウンターは各ポインタで共有しなきゃいけ
ないから。さっきの例で言うと……」

    int *pi1 = new int;
    int *pi2 = pi1;
    int *pi3 = pi1;

「この pi1 、 pi2 、 pi3 でひとつの参照カウンターを共有しないと、
ちゃんとカウントできないからね」
『それぞれで参照カウンターを持っちゃったら、全部ばらばらになっちゃう
んだ』
「それを避けるために、参照カウンターは new で作って、メンバ変数でそ
のアドレスを持つようにするわけです。図にするとこんな感じ」

┌ cSmartPointer───┐          ┌ CDebugPrinter クラスの変数 ─┐
│m_pcPrinter →→→→→→→→→→│Output()                      │
│m_piRefCounter →→→→→→     └───────────────┘
└──────────┘    ↓     ┌ int 型変数 ┐
                             →→→│ 1          │
                                   └──────┘

『 cSmartPointer 変数にはポインタしかないんだね』
「ひとつは new CDebugPrinter で作った変数を、もうひとつは new int で
作った変数を指しているわけです。ここまでが以下の行ね」

        CSmartPointer cSmartPointer( new CDebugPrinter() );

「で、まず重要なのは、これを戻り値で返す部分」

        return cSmartPointer;

「実はここでかなり複雑なことが行われています」
『え”』
「ここで呼び出し元を見てみます」

    // 出力用に、 CSmartPointer クラスを受け取ります。
    // まずデバッグ用を受け取ります。
    CSmartPointer cSmartPointer = GetPrinterInstance( DEBUG_PRINTER );

「 Version 2.10 ( No.021 ) で説明したように関数を呼び出すと〈戻り値
に置き換わる〉から」
『 GetPrinterInstance() が CSmartPointer クラスの変数に置き換わる、
つまり cSmartPointer に置き換わるってことよね』
「前半は合ってるけど後半は間違い。 cSmartPointer 変数に置き換わるん
じゃなくて、新しく変数が作られるんです」
『ええっ！？』
「というわけで次回に続く！」

/*
    Preview Next Story!
*/
『なんっかすっごく嫌な予感がします！』
「うん、ここはかなり難しいところだからね」
『どの辺が難しい？』
「プログラムの見えない所で色々と動くところが」
『そうよそれ！　なんかそういうの一番ムカツク！！』
「というわけで次回」
＜ Version 17.25 戻り値の一時変数 ＞
『につづく！』
「まぁそこが便利な所でもあるんだけどね」
『うっ』


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

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


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

    (C)KAB-studio 1999 - 2006 ALL RIGHTS RESERVED.
        http://www.kab-studio.biz/
        info@mail.kab-studio.biz
*/
////////////////////////////////////////////////////////////////////

