智能指针
2015-08-24 15:05
309 查看
1、auto_ptr的简单实现
auto_ptr的性质:会转让所有权(当拷贝构造或者复制赋值发生时)
auto_ptr的性质:会转让所有权(当拷贝构造或者复制赋值发生时)
template<class T> class auto_ptr { private: T *m_ptr; T * release() { T *value = m_ptr; m_ptr = 0; return value; } public: auto_ptr<T>(T *_p=0): m_ptr(_p) {} auto_ptr<T>(const auto_ptr<T> ©) :m_ptr(copy.release()) {} auto_ptr<T>& operator=(const auto_ptr<T> &assign) { if (this != &assign) { delete m_ptr; m_ptr = assign.release(); } return *this; } T& operator *() { return *m_ptr; } T * operator ->() {return m_ptr; } ~auto_ptr<T>() { delete m_ptr; } };2、带有引用计数的智能指针的实现
template<typename T> class countedPtr { private: T *m_ptr; long *count; void dispose() { if (-- *count == 0) { delete count; delete m_ptr; } } public: explicit countedPtr<T>(T *_p): m_ptr(_p), count(new long(1)) {} countedPtr<T>(const countedPtr<T> ©): m_ptr(copy.m_ptr), count(copy.count) { ++ *count; } countedPtr<T>& operator=(const countedPtr<T> & assign) { if (this != &assign) { dispose(); m_ptr = assign.m_ptr; count = assign.count; ++ *count; } return *this; } T & operator *() { return *m_ptr; } T * operator->() { return m_ptr; } ~countedPtr() { dispose(); } };
相关文章推荐
- Chapter 5 OpenStack镜像服务(Image service)
- jquery整理
- ios信息推送 异常 javax.net.ssl.SSLHandshakeException: Received fatal alert: handshak
- Wireshark软件使用教程(上部) 相关选项解释
- 学习软件专业的行话
- 深入理解java异常处理机制
- [Java] cmd命令行如何切换目录
- 局域网中彻底隐身
- 旧电脑重装系统
- Chapter 4 分布式(网络)存储系统
- hdoj 1232 畅通工程【并查集】
- CVPR2015深度学习回顾
- C++虚拟继承与普通继承的区别
- 在VirtualBox中实现主机文件的共享
- Spring实现AOP的4种方式
- java中Timer定时器实现和通过定时器调用url请求
- [LeedCode OJ]#198 House Robber
- iOS 8 系统自带BlurEffect 毛玻璃特效
- 如何将Mac OS X10.10.3下的Python2.7.6升级到最新的Python3.4
- Wireshark软件---安装和简单使用