标签:
//简单模拟实现boost库下的shared_ptr
#include <iostream>
#include <string.h>
using namespace std;
class shared_ptr_Rep
{
friend class shared_ptr;
public:
shared_ptr_Rep(const char *str = " ") :count(0)
{
px = new char[strlen(str) + 1];
strcpy(px, str);
}
~shared_ptr_Rep()
{
delete[]px;
}
public:
void increment()
{
count++;
}
void decrement()
{
if (--count == 0)
{
delete this;// 哪一个rep的count为0了释放当时的rep
}
}
char* get()
{
return px;
}
private:
char *px;
int count;
};
//////////////////////////////////////////////////////////////////////
class shared_ptr
{
public:
shared_ptr(const char *str = " ") :rep(new shared_ptr_Rep(str))
{
rep->increment();
}
shared_ptr(const shared_ptr &s) :rep(s.rep)
{
rep->increment();
}
shared_ptr& operator=(const shared_ptr &s)
{
if (this != &s)
{
rep->decrement(); // 迭代器
rep = s.rep;
rep->increment();
}
return *this;
}
~shared_ptr()
{
rep->decrement();
}
public:
char& operator*()
{
return *(rep->px);
}
char* operator->()
{
return rep->px;
}
private:
shared_ptr_Rep *rep;
};
int main()
{
char *p = new char('a');
char *q = new char('b');
shared_ptr s1(p);
cout << *s1 << endl;
shared_ptr s2 = s1;
cout << *s2 << endl;
shared_ptr s3(q);
s3 = s2;
cout << *s3 << endl;
shared_ptr s4(q);
cout << *s4 << endl;
shared_ptr s5 = s4;
cout << *s5 << endl;
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/zhaoyaqian552/article/details/46994597