C++ Share Ptr
来源:互联网 发布:apache tomcat.exe 编辑:程序博客网 时间:2024/05/22 19:12
看了boost的share_ptr,觉得比较复杂,感觉也就是个引用计数的问题,所以就自己写了一个
template <typename T>
class ZSharePtr
{
private:
int *count;
T *ptr;
public:
typedef T element_type;
typedef T value_type;
typedef T * pointer;
typedef T& reference;
ZSharePtr():ptr(0),count(0) { }
ZSharePtr(const ZSharePtr& p):ptr(p.ptr),count(p.count)
{
if ( count != 0 ) addref();
}
ZSharePtr(T* p): ptr(p), count(0)
{
count = new int;
}
virtual ~ZSharePtr()
{
_release();
}
reference operator*() const
{
ZASSERT(ptr!=0);
return *ptr;
}
T* operator->() const
{
ZASSERT(ptr!=0);
return ptr;
}
T* get() const
{
ZASSERT(ptr!=0);
return ptr;
}
bool operator!() const
{
return ptr == 0;
}
ZSharePtr& operator=(const ZSharePtr& rhs)
{
if ( rhs.ptr == ptr ) return *this;
_release();
ptr = rhs.ptr;
count = rhs.count;
return *this;
}
protected:
int addref()
{
ZASSERT(count != 0);
return ++(*count);
}
int decref()
{
ZASSERT(count != 0);
return --(*count);
}
virtual void free()
{
if (ptr)
{
delete ptr;
ptr = 0;
}
}
void set_ptr(T* ptr)
{
ptr = ptr;
}
T* get_ptr() const
{
return ptr;
}
void _release()
{
if ( count == 0 ) return;
if ( decref() == 0 )
{
delete count;
count = 0;
free();
}
}
};
template<typename T, typename U>
inline bool operator== (const ZSharePtr<T>& lhs, const ZSharePtr<U> rhs)
{
return lhs.get()==rhs.get();
}
template<typename T, typename U>
inline bool operator!= (const ZSharePtr<T>& lhs, const ZSharePtr<U> rhs)
{
return lhs.get()!=rhs.get();
}
- C++ Share Ptr
- [C/C++]: 浅谈share library
- C语言拾遗:常量指针与指针常量(const int *ptr, int const *ptr, int * const ptr, const int * const ptr区别)
- What does it mean to write `static void * ptr = &ptr` in objective-c?
- C/C++:面试题 int *ptr=(int *)(&a+1);
- share
- share
- share
- share
- 【C++】智能指针类和OpenCV的Ptr模板类
- LLVM Create a PointerValue from c-side-ptr
- Smart ptr
- Ptr ReturnHandler
- int * (*ptr)()
- byte ptr
- 理解*ptr++
- shared ptr
- MySQL缺少c:/mysql/share/charsets/?.conf的解决
- NDS程序开发可行性分析报告
- Software Development Top 30 Mistakes
- 依赖倒置原则
- 趣味智力题 - 面试题答案揭密
- java应用程序怎样获取外接设备信号(通过usb)
- C++ Share Ptr
- 把.NET程序部署到没有安装.NET Framwork的机器上
- netbeans5.5中使用自定义组件
- 序员每天该做的事
- 2007.09.6 晴
- 作业
- 04年华为的一道排序题..
- Ubuntu GNOME快捷键
- 5种你不可错过的免费字体