首页 > 代码库 > careercup-C和C++ 13.8

careercup-C和C++ 13.8

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

解法:

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

智能指针必须为给定对象的所有引用维护单一引用计数。主要实现构造函数、复制构造函数和赋值运算符,析构函数。

 

C++实现代码:

#include<iostream>#include<cstdlib>#include<new>using namespace std;template <typename T>class SmartPointer{public:    SmartPointer(T* ptr)    {        ref=ptr;        ref_count=(unsigned*)malloc(sizeof(unsigned));        *ref=1;    }    SmartPointer(SmartPointer<T> &sptr)    {        ref=sptr.ref;        ref_count=sptr.ref_count;        ++(*ref_count);    }    SmartPointer<T> &operator=(SmartPointer<T> &sptr)    {        if(this==&sptr) return *this;        if(*ref_count>0)        {            remove();        }        ref=sptr.ref;        ref_count=sptr.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;        }    }private:    T* ref;    unsigned *ref_count;};int main(){    int *p1=new int();    *p1=1111;    int *p2=new int();    *p2=22222;    SmartPointer<int> sp1(p1),sp2(p2);    SmartPointer<int> spa=sp1;    sp2=spa;}

 

careercup-C和C++ 13.8