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

___

■ ReferenceCount(リファレンスカウント)


    リファレンスカウントとはオブジェクトの寿命をコントロールする方法のこと。

    オブジェクトは誰かから参照されている間は、生き続けて、誰からも参照されなくなったら死ぬ、
    という考えで実装する方式のこと。

    Java や C# では言語レベルでこの機能を提供するため
    明示的に delete を呼ぶ必要がない。

    問題となるのは誰がオブジェクトを作成して、破棄するかということ。
    通常は オブジェクトを作成した人が破棄する。
    



しかし、複数の人が参照し始めると、勝手に削除することも危険になる。 そこで、オブジェクト自身が削除するという方式ができた。
___

■ ReferenceCount

    Object *A = new Object();

    // 別のポインタからも参照させる。この時点で [ A, B ]の2つから参照される。 
    {
      Object *B = obj;

      // B からも見ているよ、ということを伝える。
      B->addRef();

      // 参照先は責任をもって release() をよんで不要になったことを伝える。
      B->release();
    }

    // ここで誰からも参照されなくなるので、自分自身で自分を消去する。
    A->release();
    class Object {

        Object() : m_cnt(1) {

        }

        void addRef() {
          m_cnt ++;
        }

        void release() {
          m_cnt --;
          if ( m_cnt == 0 ) {
             delete this;
          }
        }

      private:
        int m_cnt;
    };
WARNING リファレンスカウントは 適切に addRef と release が呼ばれないと delete 忘れや ダングリングポインタ と同じ現象がおきる。 そこで 呼び出し側に操作させずに、少し賢いポインタを渡してあげる。 REFERENCE SmartPointer REFERENCE SharedPointer

NINJAIDX 12