• 引用计数


    引用计数的实现:

    template <class T>

    class ReferenceCount

    {

    public:

      explicit ReferenceCount(T* p):ptr(p),count(new int(1)){}

      ReferenceCount(const ReferenceCount<T>& p) throw() : ptr(p.ptr),count(p.count)

      {

        ++*count;

      }

      ReferenceCount<T>&  operator = (const ReferenceCount<T>& p)

      {

        if(this != &p)

        {

          dispose();

          ptr = p.ptr;

          count = p.count;

          ++*count;

        }

        return *this;

      }

      T* operator->() throw()

      {

        return ptr;

      }

      T& operator *() throw()

      {

        return *ptr;

      }

    private:

      void dispose()

      {

        if(0 == --*count)

        {

          delete ptr;

          delete count;

        }

      }

    private:

      T* ptr;

      int* count;

    };

    数个群集共享相同的数据元素,可以运用引用计数。如下:

    typedef ReferenceCount<std::string> stringPtr;
     char *strings[] ={"my","school","is","hdu"};
     std::deque<ReferenceCount<std::string> > coll1;
     std::deque<ReferenceCount<std::string> > coll2;
     for(int i = 0;i < 4;++i)
     {
      stringPtr tempStringPtr(new std::string(strings[i]));
      coll1.push_back(tempStringPtr);
      coll2.push_back(tempStringPtr);
     }

    这样coll1和coll2中共享同一份数据,每个元素的引用计数都是2.

  • 相关阅读:
    ThinkPHP中的__URL__或__URL__等
    如何输出其他模块的操作模板
    如何改变ThinkPHP默认访问模块
    C#中文件操作
    常见的网页技巧(转)
    JS实现验证码局部更新
    winform控件随窗体大小变化而变化
    php 观察者模式
    PHP生命周期
    Mac 安装redis
  • 原文地址:https://www.cnblogs.com/lverson/p/3219472.html
Copyright © 2020-2023  润新知