zoukankan      html  css  js  c++  java
  • 引用计数

    引用计数的实现:

    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.

  • 相关阅读:
    16-pymysql模块的使用
    15-可视化工具Navicat的使用
    14-补充内容:MySQl创建用户和授权
    13-多表查询
    12-单表查询
    11-数据的增删改
    springboot整合thumbnailator实现图片压缩
    centos7下使用yum安装redis
    springboot以jar包方式启动、关闭、重启脚本
    centos7-每天定时备份 mysql数据库
  • 原文地址:https://www.cnblogs.com/lverson/p/3219472.html
Copyright © 2011-2022 走看看