(1) shared_ptr类的实现
实现原理:采用引用计数器的方法,允许多个智能指针指向同一个对象,每当多一个指针指向该对象时,指向该对象的所有智能指针内部的引用计数加1,每当减少一个智能指针指向对象时,引用计数会减1,当计数为0的时候会自动的释放动态分配的资源。
1) 智能指针将一个计数器与类指向的对象相关联,引用计数器跟踪共有多少个类对象共享同一指针;
2) 每次创建类的新对象时,初始化指针并将引用计数置为1;
3) 当对象作为另一对象的副本而创建时,拷贝构造函数拷贝指针并增加与之相应的引用计数;
4) 对一个对象进行赋值时,赋值操作符减少左操作数所指对象的引用计数(如果引用计数为减至0,则删除对象),并增加右操作数所指对象的引用计数;
5) 调用析构函数时,构造函数减少引用计数(如果引用计数减至0,则删除基础对象)。
#include <iostream>
using namespace std;
template<typename T>
class SharedPtr
{
public:
SharedPtr(T* ptr = NULL):ptr_(ptr),pcount_(new int(1))
{
}
SharedPtr<T>& operator = (const SharedPtr& s)
{
if (this != &s)
{
if (--(*(this->pcount_)) == 0)
{
delete this->pcount_;
delete this->ptr_;
}
}
return *this;
}
T& operator*()
{
return *(this->ptr_);
}
T* operator->()
{
return this->ptr_;
}
~SharedPtr()
{
--(*(this->pcount_));
if (this->pcount_ == 0)
{
delete ptr_;
ptr_ = NULL;
delete pcount_;
pcount_ = NULL;
}
}
private:
T* ptr_;
int* pcount_;
};
int main()
{
return 0;
}