トップページ
ひらく | たたむ | ページトップ
↓マウスで反転選択した文字を検索
C++
   
ページ内検索 ページ外検索
検索したい文字を入力して
ENTERを押すと移動します。
\n
[ トップページ ]
[ ____CommandPrompt ] [ ____JScript ] [ ____MySQL ] [ ____Cygwin ] [ ____Java ] [ ____Emacs ] [ ____Make ] [ ____Perl ] [ ____Python ] [ ____OpenGL ] [ ____C# ] [ ____StyleSheet ] [ ____C++ ] [ ____Winsock ] [ ____Thread ] [ ____VisualStudio ] [ ____C ] [ ____Win32API ] [ ____Lua ] [ ____PhotoShop ]
ヘッダ検索

___

■ リソース管理


___

■ ポインタ変数はnewをした後にdeleteする

delete をした後のポインタ変数はすぐに、安全な状態にする

    // p の指す先を解放したら 
    delete p;

    // p をリセットする。
    p = NULL;

    // ここで即死してくれる。
    p->func();

___

■ リファレンスカウント

ヒープにアロケートしたオブジェクトを解放する処理を 自分自身にやらせる。
    class Resource {

      public:
        create();


      private:
       int m_cnt;
    };


    // Resource オブジェクトの管理機能つきポインタ
    class ResourcePtr {
      public:
         ResourcePtr( Resource *p ) 

        ~ResourcePtr() {
          m_ptr->m_cnt --;

          if ( m_ptr->m_cnt == 0 ) {
            delete m_ptr;
          }
        }
      
      private:
        Resource *m_ptr;
    };

REFERENCE コンストラクト方法を制御する
    {
       ResourcePtr *p = Resource::create();

       // 好きなだけコピーできて
       p2 = p1;

       func( p2 );

       // 誰からも参照されなくなったら自動で解放される。
       
    }

    
    


___

■ コピーオンライト

コンピュータプログラミングにおける最適化戦略の一種である。 コンピュータ内部で、 ある程度大きなデータを複製する必要が生じたとき、 愚直な設計では、 直ちに新たな空き領域を探して割り当て、コピーを実行する。 ところが、もし複製したデータに対する書き換えがなければその複製は無駄だったことになる。 そこで 複製を要求されても、コピーをした振りをして、 とりあえず原本をそのまま参照させるが、 ただし、そのままで本当に書き換えてはまずい。 原本またはコピーのどちらかを書き換えようとしたときに、それを検出し、その時点ではじめて新たな空き領域を探して割り当て、コピーを実行する。 これが「書き換え時にコピーする」 基盤となる考え方は、複数の(何らかの)要求者がリソースを要求するときに、 少なくとも当初はそれらの要求を区別する必要がないときに同じリソースを与える、というものである。 これは要求者がリソースを「更新」しようとするまで保持され、「更新」が他者に見えないようにリソースの 個別のコピーを必要になった時点で作成する。 要求者からはこの一連の動きは見えない。 第一の利点は要求者が全く更新しなければ、個別のコピーを作成する必要が生じないという点である。
___

■ ユーザーコードからポインタを隠す

リソースの管理をクラス内にカプセル化してしまう。
    // このスコープを抜ければ、file オブジェクトのデストラクタが解放してくれる。
    {
      File file( );
      file->readLine();


    }
リソースが見れると漏れが起きる。
    FILE *fp = fopen();
    
    fgets( fp, )
    
    fclose( fp );


NINJAIDX 12