////////////////////////////////////////////////////////////////////
■　　　パソナキャレントは、あなたの『正社員転職』を  　　■■■■■
■■　　　成功に導きます。『求人探し』『書類・面接対策』  　■■■■
■■■　　　　『入社』まで無料でサポートいたします。　  　　　■■■
■■■■    　⇒http://af1.mag2.com/m/af/0000008658/001/s00000001423001/031  　　                                   　■■
■■■■■　　　　　まずは『無料転職サポート』にご登録を！ 　　 　■
////////////////////////////////////////////////////////////////////
/*

    KAB-studio.h


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

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

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

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

2006/10/16 (Mon)
　#pragma twice ホームページ版にアーカイブ追加！
17.04 アクセス修飾子のまとめ
17.05 CWnd クラスの継承関係
[ #pragma twice ]
http://www.kab-studio.biz/Programing/PragmaTwice/index.html


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

2006/10/08 (Sun)
　８時半起き。ももとふくらはぎが痛い。２時からプレーオフ観戦。アニメ
をDVD-Rにダビング。あとはほとはー外伝３描き。

2006/10/09 (Mon)
　９時半起き。まだ足痛い。プレーオフ……西武が負けてしまった。
Machicianの「作らなきゃいけないもの」をピックアップ。夜はプール。
最近ラクガキ描き。

2006/10/10 (Tue)
　９時半起き。昨日より疲れてる。タブレット周りを色々と試してみる。な
ぜかプログラミングとお絵描きは別物。プールはお休み。

2006/10/11 (Wed)
　９時半起き。ほとはー外伝３描き。プールで1キロ泳ぐ。プールの帰りに
ファイナルファンタジーVアドバンスを買ってしまう。

2006/10/12 (Thu)
　FFVやりまくり。プールで1キロ泳ぐのはつらい。ダイエットの内容。
今年中に63キロ、今年度中に60キロまで落とす。

2006/10/13 (Fri)
　11時起き。今週はダメ。FFV以外何かしたかな。夜にプール。なんか
ぐるぐるぐるぐる。

2006/10/14 (Sat)
　11時半起き。体が重い。そのままぐだーっと。某絵板のラクガキが楽しい。
アニメをがーっと。


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

2006/10/08 (Sun)
http://d.hatena.ne.jp/kab_studio/20061008
起きた……。
西武負けた……。
[KAB-studio]ぷらとわ追加。
[アニメ]「牙」 第28話「存在の証」
[アニメ]おねがいマイメロディ〜くるくるシャッフル！〜 
　第28話「ギターが上手くなったらイイナ！」
[アニメ]乙女はお姉さまに恋してる 
　第1話「口紅（ルージュ）をひいた王子様」(新)
[アニメ]史上最強の弟子 ケンイチ 第1話「梁山泊！豪傑の集いし場所」(新)
[アニメ]少年陰陽師 第1話「この少年、晴明の後継につき」(新)
[アニメ]らぶドル〜Lovely Idol〜 第1話「らぶドルですか？」(新)
[アニメ]くじびきアンバランス 
　第1話「みんな、がっこうでおどろく。7点」(新)
[アニメ]Gift 〜eternal rainbow〜 第1話「虹が宿る街」(新)
ふぅ……。
[KAB-studio][ほとはー]ほとはー外伝３ P.74

2006/10/09 (Mon)
http://d.hatena.ne.jp/kab_studio/20061009
起きたー
西武、第2ステージ進出ならず……。
[水泳ダイエット]10月2回目
[アニメ]金色のコルダ 第2話「前途多難なガヴォット」
[アニメ]夜明け前より瑠璃色な Crescent Love 
　第1話「お姫様がホームステイ！？」(新)
[アニメ]ギャラクシーエンジェる〜ん 
　第2話「激安！グラウンドバザーる〜ん」

2006/10/10 (Tue)
http://d.hatena.ne.jp/kab_studio/20061010
起きた。
[きらら]まんがタイムきらら 2006年11月号
[アニメ]銀色のオリンシス 第1話「水色の再生」(新)
[アニメ]BLACK BLOOD BROTHERS 第2話「調停員（コンプロマイザー）」
[アニメ]N・H・Kにようこそ！ 第14話「現実（リアル）にようこそ！」
[アニメ]Pumpkin Scissors 第2話「戦災復興部隊」

2006/10/11 (Wed)
http://d.hatena.ne.jp/kab_studio/20061011
起きた……
[link][装備]エプソンの新しい液晶プロジェクター
[水泳ダイエット]10月3回目
[買][FFVA]フラゲ（爆）。
[FFVA]ジョブ取得
[アニメ]DEATH NOTE 第2話「対決」
[アニメ]ブラックラグーン 第14話「Bloodsport Fairytale」
[アニメ]ネギま！？ 第2話「うっそ仮契約ってそんなことすんの！？」

2006/10/12 (Thu)
http://d.hatena.ne.jp/kab_studio/20061012
お、起き……
[FFVA]やりすぎた。
パ・リーグは日本ハムが優勝！
[水泳ダイエット]10月4回目
[アニメ]武装錬金 第2話「ホムンクルスの正体」

2006/10/13 (Fri)
http://d.hatena.ne.jp/kab_studio/20061013
……起きたよ？
[水泳ダイエット]10月5回目
[link]クローン猫売れず、廃業へ　米企業「毛の模様が違う」
[装備]赤いiPod nano
[FFVA]クルル参戦
[Prog]Windows Updateに失敗する。
[アニメ]ザ・サード 〜蒼い瞳の少女〜 第22話「還らざる魂の蜃気楼」
[アニメ]働きマン 第1話「女の働きマン」(新)
[アニメ]あさっての方向。 第2話「すれちがい」
[アニメ]すもももももも〜地上最強のヨメ〜 第2話「天然爆熱少女」

2006/10/14 (Sat)
http://d.hatena.ne.jp/kab_studio/20061014
起き……
プールはお休み。
[アニメ]彩雲国物語 第24話「寝耳に水」
[アニメ]おとぎ銃士 赤ずきん 第16話「いばら姫とクローバー」
[アニメ]ふしぎ星の☆ふたご姫 Gyu! 第29話「レインにおまかせ☆どきどきラブレター」
[アニメ]コードギアス 反逆のルルーシュ 第2話「覚醒の白き騎士」
[アニメ]銀河鉄道物語〜永遠への分岐点〜 第2話「冷静と暴走の狭間」


////////////////////////////////////////////////////////////////////
// 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/s00000001423001/031  　　                                   　■■
■■■■■　　　　　まずは『無料転職サポート』にご登録を！ 　　 　■
////////////////////////////////////////////////////////////////////
// #pragma twice
http://www.kab-studio.biz/Programing/PragmaTwice/index.html

　Version 17.23
スマートポインタ

「前回は delete で解放する方法についていくつか説明しました」
『なんかトリッキーな感じだったんだけど……』
「まぁ、メモリを自由に操作できる C++ 言語だから、それだけ自由度が必要
ってところかな」
『自由すぎ……』
「さて、今回はもうひとつの問題について」

・ポインタをいつ解放するか
　・使用中に解放してはいけない（存在しない変数を使ってしまう）
　・解放し忘れてはいけない（メモリリークになる）
　・解放前にアドレスを上書きしてはいけない（同上）

『これは結構大きな問題よね』
「この問題を解決するための方法のひとつが【スマートポインタ】というも
のです」
『やせてるポインタ？』
「違います。スマート、っていうのは利口な、っていう意味」
『あー、そういえばそういう意味で使うことあるよね。スマートなやり方と
か』
「そうそう、そっちの意味。スマートポインタの考え方は」

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

「というものです」
『わけわかりません』
「なので実際に例を使って見てみましょう。まずはプログラム全文」

// Main.cpp
#include <Windows.h>
#include <stdio.h>

// 「出力」を行うクラスのインターフェイス。
class CPrinter
{
public:
    // 出力関数。純粋仮想関数です。
    virtual void Output( const char *p_pch ) = 0;
};

// 「デバッグ出力」を行うクラス。
class CDebugPrinter : public CPrinter
{
public:
    // 出力関数。オーバーライドしています。
    void Output( const char *p_pch )
    {
        // デバッグ出力します。
        OutputDebugString( p_pch );
    }
};

// 「ダイアログ出力」を行うクラス。
class CDlgPrinter : public CPrinter
{
public:
    // 出力関数。オーバーライドしています。
    void Output( const char *p_pch )
    {
        // ダイアログに出力します。
        MessageBox( NULL, p_pch, "デバッグ", MB_OK );
    }
};

// スマートポインタクラス。
class CSmartPointer
{
    // これが対象のポインタ。
    CPrinter *m_pcPrinter;
    // 参照カウンターへのポインタ。
    int *m_piRefCounter;
public:
    // コンストラクタでポインタを渡します。
    CSmartPointer( CPrinter *p_pcPrinter )
        : m_pcPrinter( p_pcPrinter )
        , m_piRefCounter( new int )
    {
        // 参照カウンターに 1 をセットします。
        *m_piRefCounter = 1;
    }

    // コピーコンストラクタ。
    CSmartPointer( const CSmartPointer &p_rcSmartPointer )
        : m_pcPrinter( p_rcSmartPointer.m_pcPrinter )
        , m_piRefCounter( p_rcSmartPointer.m_piRefCounter )
    {
        AddRef();
    }

    // デストラクタ。
    ~CSmartPointer()
    {
        Release();
    }

    // = 演算子をオーバーロードします。
    CSmartPointer &operator =( const CSmartPointer &p_rcSmartPointer )
    {
        if( m_pcPrinter != p_rcSmartPointer.m_pcPrinter )
        {
            // 対象ポインタのアドレスが違う場合は
            // 参照カウンターを減らします。
            Release();
        }

        // コピーします。
        m_pcPrinter = p_rcSmartPointer.m_pcPrinter;
        m_piRefCounter = p_rcSmartPointer.m_piRefCounter;
        // 参照カウンターを増やします。
        AddRef();

        return *this;
    }

    // 対象ポインタが持つアドレスを返します。
    CPrinter *GetPointer()
    {
        return m_pcPrinter;
    }

private:
    // 参照カウンターを 1 増やします。
    void AddRef()
    {
        // 参照カウンターをひとつ増やします。
        ++( *m_piRefCounter );
    }

    // 参照カウンターを 1 減らし、ゼロなら解放します。
    void Release()
    {
        // 参照カウンターをひとつ減らします。
        --( *m_piRefCounter );
        // 参照カウンターがゼロになったら解放します。
        if( *m_piRefCounter == 0 )
        {
            delete m_pcPrinter;
            delete m_piRefCounter;
        }
    }
};

// フラグ用定数値。
const int DEBUG_PRINTER = 0;
const int DLG_PRINTER = 1;

// 「出力」クラスを返す関数。
// 引数が DEBUG_PRINTER なら CDebugPrinter クラスのポインタを、
// DLG_PRINTER なら CDlgPrinter クラスのポインタを返します。
CSmartPointer GetPrinterInstance( int p_iFlag )
{
    // フラグによって出力を変更します。
    if( p_iFlag == DEBUG_PRINTER )
    {
        CSmartPointer cSmartPointer( new CDebugPrinter() );
        return cSmartPointer;
    }
    // else
    CSmartPointer cSmartPointer( new CDlgPrinter() );
    return cSmartPointer;
}

int WINAPI WinMain
    ( HINSTANCE p_hInstance
    , HINSTANCE p_hPrevInstance
    , LPSTR p_pchCmdLine
    , int p_iCmdShow
    )
{
    // 出力用に、 CSmartPointer クラスを受け取ります。
    // まずデバッグ用を受け取ります。
    CSmartPointer cSmartPointer = GetPrinterInstance( DEBUG_PRINTER );
    // 出力します。
    cSmartPointer.GetPointer()->Output( "あいうえお\n" );

    // 次にダイアログ用を受け取ります。
    cSmartPointer = GetPrinterInstance( DLG_PRINTER );
    // 出力します。
    cSmartPointer.GetPointer()->Output( "あいうえお\n" );

    return 0;
}

『長！』
「最初の CPrinter 、 CDebugPrinter 、 CDlgPrinter の3クラスは 
Version 17.20 ( No.375 ) の時のものと同じです」
『あ、ホントだ』
「残りは次回説明します！」

/*
    Preview Next Story!
*/
『久々に長いプログラムねー』
「スマートポインタは複雑だから」
『メンバ関数がいっぱいある……』
「でも、これが理解できればクラスの大部分が理解できたことになるかも」
『おお！』
「というわけで次回」
＜ Version 17.24 スマートポインタと参照カウンター ＞
『につづく！』
「ま、それだけ難しいってことなんだけどね」
『なんですとー！』


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

・このメールを返信しないでください。
・ご意見・ご希望・ご感想は[チョー普通な日記]よりお送りください。
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
*/
////////////////////////////////////////////////////////////////////

