【干货】share智能指针的模拟实现
2016-05-28 18:36
274 查看
智能指针是C++实现自动内存管理的一种手段,本质是通过对象出作用域会自动析构,让对象保存与所需管理的目标指针指向同一片动态开辟空间的地址,出作用域会自动析构。这里模拟了,boost中的share智能指针,代码如下:
#pragma once
template<class T>
class SharePtr
{
public:
SharePtr(T*ptr)
:_ptr(ptr),
_Rcount(new size_t(1))//引用计数解决拷贝构造与赋值运算符重载的问题
{
}
~SharePtr()
{
if (--(*_Rcount))
{
delete _ptr;
delete _Rcount;
}
}
SharePtr(const SharePtr&ptr)
:_ptr(ptr)
{
++(*_Rcount);
}
SharePtr& operator = (SharePtr ptr)
{
swap(_ptr, ptr._ptr);
swap(_Rcount, ptr._Rcount);
return *this;
}
T & operator * ()//使对象完成与指针类似的操作,在这里重载了“*”、“->”的操作符
{
return *_ptr;
}
T * operator ->()
{
return _ptr;
}
size_t GetRefCount()
{
return *_Rcount;
}
private:
T *_ptr;
size_t* _Rcount;
}; 如有不足,希望批评指正。
本文出自 “pawnsir的IT之路” 博客,请务必保留此出处http://10743407.blog.51cto.com/10733407/1753276
#pragma once
template<class T>
class SharePtr
{
public:
SharePtr(T*ptr)
:_ptr(ptr),
_Rcount(new size_t(1))//引用计数解决拷贝构造与赋值运算符重载的问题
{
}
~SharePtr()
{
if (--(*_Rcount))
{
delete _ptr;
delete _Rcount;
}
}
SharePtr(const SharePtr&ptr)
:_ptr(ptr)
{
++(*_Rcount);
}
SharePtr& operator = (SharePtr ptr)
{
swap(_ptr, ptr._ptr);
swap(_Rcount, ptr._Rcount);
return *this;
}
T & operator * ()//使对象完成与指针类似的操作,在这里重载了“*”、“->”的操作符
{
return *_ptr;
}
T * operator ->()
{
return _ptr;
}
size_t GetRefCount()
{
return *_Rcount;
}
private:
T *_ptr;
size_t* _Rcount;
}; 如有不足,希望批评指正。
本文出自 “pawnsir的IT之路” 博客,请务必保留此出处http://10743407.blog.51cto.com/10733407/1753276
相关文章推荐
- 【代码】模板动态线性表&类型萃取
- 【技巧】通过适配器模式完成栈的数据结构
- 【代码】模板实现动态线性表(无类型萃取)
- 解决 NSObjCRuntime的问题
- 【干货】C++通过模板特化实现类型萃取实例--实现区分基本类型与自定义类型的memcpy
- 【代码】模板实现双向链表的去重、拼接、合并、排序
- 关于mybatis的collection映射问题
- 【探索】VS下实现虚继承的方法-2
- 【总结】C++静态成员函数及测试用例
- 15种最佳系统日志优化实践
- 【总结】C++静态成员变量的特性总结及测试用例
- 【总结】C++静态成员变量的特性总结及测试用例
- 求N个数的最小公倍数
- WPF模板
- 【总结】C++基类与派生类的赋值兼容规则
- 【总结】逆置双向链表的三种方法
- 【C语言位运算的应用】如何按bit位翻转一个无符号整型
- 双向链表的C++实现
- C++单链表的设计与实现
- 如何限制类仅能创建一个对象