闲来无事,写了一个简单的智能指针
2009-02-15 14:43
495 查看
#pragma once /* int *p = new int(9); SharedPtr<int> px(p); //ok SharedPtr<int> py(new int(9)); //good SharedPtr<int> pz = px; //good SharedPtr<int> pw(p); //Error, NO!! because of px. */ template<class T> class SharedPtr { public: //Constructor // explicit SharedPtr(T* p = NULL) : m_ptr(p), m_count(new long(1)) { } SharedPtr(const SharedPtr<T>& p) : m_ptr(p.m_ptr), m_count(p.m_count) { _AddRef(); } SharedPtr<T>& operator=(const SharedPtr<T>& p) { if (*this != p) { _Release(); m_ptr = p.m_ptr; m_count = p.m_count; _AddRef(); } return *this; }; //operator // T& operator*() const { return *m_ptr; } T* operator->() const { return m_ptr; } operator bool() const { return (m_ptr != 0); } bool operator ==(const SharedPtr<T>& p) const { return m_ptr == p.m_ptr; } bool operator !=(const SharedPtr<T>& p) const { return m_ptr != p.m_ptr; } //Get pointer // T* GetInternalPtr() { return m_ptr; } //Deconstructor // ~SharedPtr() { _Release(); } public: //Add reference // long _AddRef() { return m_count ? ++(*m_count) : 0; } //Release the object // long _Release() { if (m_count == NULL) return 0; long nRef = --(*m_count); if (nRef == 0) { delete m_ptr; delete m_count; m_ptr = 0; m_count = 0; } return nRef; } private: //Data // T* m_ptr; //shared ptr long* m_count;//ptr count };
相关文章推荐
- 智能指针一个简单例子
- 一个简单的智能指针的实现
- 一个智能指针的简单实现
- 闲来无事,用javascript写了一个简单的轨迹动画
- 请简述智能指针原理,并实现一个简单的智能指针。
- 闲来无事,将自己收集到的工具类封装了下,做了一个lib,写了个简单的mvp,初学者可以看看
- 一个简单的智能指针实现
- 智能指针原理,并实现一个简单的智能指针
- 一个简单的C++智能指针的实现
- 一个简单的智能指针的实现
- 模仿的智能指针的一个简单实现
- 闲来无事,倒腾了一个简单的silverlight视频播放器
- 闲来无事写的一个简单的JavaScript日历
- 智能指针原理,并实现一个简单的智能指针
- 一个简单的智能指针实现
- 实现一个简单的智能指针
- c++智能指针的简单实现
- 最简单的智能指针原理
- C++智能指针简单剖析
- C++智能指针的简单实现