智能指针能防止内存泄漏和非法指针引用。
根据C++Primer和MSDN中关于shared_ptr的接口,实现了只有重要函数的简化版的shared_ptr
#include <iostream>
#include <cstdio>
using namespace std;
template<class Ty> class shared_ptr;
template<class Ty> class u_Counter;
template<class Ty>
class shared_ptr {
private:
u_Counter<Ty> *ptr;
public:
//下面的接口都是按照MSDN上标准摘取几个重要的自己实现
typedef Ty element_type;
shared_ptr():ptr(new u_Counter<Ty>()){}
shared_ptr(element_type _element) : ptr(new u_Counter<Ty>(_element)){}
shared_ptr(const shared_ptr & sp) : ptr(new u_Counter<Ty>(sp)){}
shared_ptr& operator= (const shared_ptr &sp)
{
++sp.ptr -> use;
if (--ptr -> user == 0)
delete ptr;
ptr = sp -> ptr;
return *this;
}
~shared_ptr()
{
if (--ptr->use == 0)
delete ptr;
}
//void swap(shared_ptr &sp);
//void reset();
//Ty &get() const;
};
template<class Ty>
class u_Counter
{
friend class shared_ptr<Ty>;
Ty *p;
size_t use;
u_Counter() : p(NULL), use(1){}
u_Counter(Ty _p):p(new Ty(_p)), use(1){}
~u_Counter(){ delete p;};
};