zoukankan      html  css  js  c++  java
  • share_ptr简单实现

    template<typename T>
    
    class share_ptr {
    private:
            //使用int *是为了每一个shared_ptr的count成员都指向同一个引用次数,每一个shared_ptr(绑定相同_ptr)操作的是同一个引用次数。
    	int* count;//引用计数
    	T* my_ptr; // 被封装的指针
    public:
    	//构造函数
    	share_ptr(T* p)
    		:count(new int(1)), my_ptr(p) {}
    	~share_ptr() 
    	{
    		if (--*count == 0)
    		{
    			delete my_ptr;
    			delete count;
    		}
    	}
    	//
    	int getRef() { return *count; }
    	//运算符重载
    	T* operator->() { return my_ptr; }
    	T* operator*() { return *my_ptr; }
    
    	//拷贝构造函数
    	share_ptr(share_ptr<T>& other)
    		:count(&(++*other.count)), my_ptr(other.my_ptr) {}
    	
    	share_ptr<T>& operator=(share_ptr<T>& other)
    	{
    		++* other.count; //复制的引用对象的计数增加
    		//被赋值对象存在引用对象,且计数为1(更换引用对象后,清除之前的)
    		if (this->my_ptr && 0 == -- * this->count)
    		{
    			delete count;
    			delete _ptr;
    		}
    		this->my_ptr = other.my_ptr;
    		this->count = other.count;
    		return *this;
    	}
    };
    
  • 相关阅读:
    dos命令连接mysql并且查看编码方式
    node.js 好博客
    node.js 连接数据库
    express的基本配置项
    express 手册
    VPS巴士
    nodejs书籍
    nodejs connect模块
    网站工具,如天气,手机归属地
    NodeJS的异步编程风格
  • 原文地址:https://www.cnblogs.com/EvansPudding/p/12764905.html
Copyright © 2011-2022 走看看