zoukankan      html  css  js  c++  java
  • smartPtr指针的实现

    编写一个智能指针类。智能指针是一种数据类型,一般用模板实现,模拟指针行为的同时还提供自动来及回收机制。它会自动记录SmartPointer<T*>对象的引用计数,一旦T类型对象的引用计数为零,就会释放该对象。

    解法:

    智能指针跟普通指针一样,但它借由自动化内存管理保证了安全性,避免了诸如悬挂指针、内存泄漏和分配失败等问题。

    智能指针必须为给定对象的所有引用维护单一引用计数。

    实现代码:

    template<class T>
    class SmartPointer
    {
    public:
        SmartPointer(T* ptr)
        {
            ref=ptr;
            ref_count=(unsigned*)malloc(sizeof(unsigned));
            *ref_count=1;
        }
        
        
        SmartPonter(SmartPointer &rhs)
        {
            ref=rhs.ref;
            ref_count=rhs.ref_count;
            ++(*ref_count);
        }
            
        SmartPointer& operator=(SmartPointer& rhs)
        {
            if(*this==rhs)
                return *this;
            if(ref_count>0)
                remove();
            ref=rhs.ref;
            ref_count=obj.ref_count;
            ++(*ref_count);
            return *this;
        }
    
        ~SmartPointer()
        {
            remove();
        }
        
        T getValue()
        {
            return *ref;
        }
        
    protected:
        void remove()
        {
            --(*ref_count);
            if(*ref_count==0)
            {
                delete ref;
                free(ref_count);
                ref=NULL;
                ref_count=NULL;
            }
        }
        T *ref;
        unsigned *ref_count;
    };
  • 相关阅读:
    Uri编码,包括javascript前端与C#服务器端
    快速排序
    bootstrap
    boosting
    bagging
    SHELL排序
    冒泡排序
    插入排序
    选择排序
    二叉树的数学性质
  • 原文地址:https://www.cnblogs.com/wuchanming/p/4376730.html
Copyright © 2011-2022 走看看