智能指针的实现
来源:互联网 发布:下载淘宝帐号注册账号 编辑:程序博客网 时间:2024/04/30 08:09
智能指针的作用,是让使用者更方便的使用指针来申请动态空间,降低出错的可能性。
普通的指针申请动态内存要手动进行new和delete,如果忘记释放内存,则会出现内存泄露。
使用auto_ptr作为动态对象,当auto_ptr对象离开作用域时,其所申请的动态内存将会自动释放。
有了auto_ptr,当你想要为某个T类型申请动态空间时,不去亲自申请空间(T *p = new T;),而是创建一个auto_ptr对象(auto_ptr obj<T> pt;)
auto_ptr的接口设计为如下:
// interfacetemplate<class T> class auto_ptr{public://构造函数explicit auto_ptr(T *p = 0);//拷贝构造函数template<class U> auto_ptr(auto_ptr<U> &rhs);//析构函数~auto_ptr();//重载赋值运算符template<class U> operator=(auto_ptr<U> &rhs);T& operator*() const;T* operator->() const;T& get() const;T* release();void reset(T *p = 0);private:// 内部真正的指针T *pointee;// 将自己设为自己的友元类template<class U> friend class auto_ptr<U>;};
auto_ptr类的实现:
template<class T> class auto_ptr{public://构造函数explicit auto_ptr(T *p = 0):pointee(p) {}// 拷贝构造函数template<class U> auto_ptr(auto_ptr<U>& rhs):pointee(rhs.release()) {}// 析构函数~auto_ptr() {delete pointee;}// 重载赋值运算符template<class U> auto_ptr<T>& operator=(auto_ptr<U> &rhs){if(this != rhs)reset(rhs.release());return *this;}// 重载指针操作符T& operator*() const { return *pointee; }// 重载箭头操作符T* operator->() const { return pointee; }// 获取指针T* get() const { return pointee; }// 将指针指向空T* release(){T *oldPointee = pointee;pointee = 0;return oldPointee;}// 将指针指向pvoid reset(T *p = 0){if(pointee != p){delete pointee;pointee = p;}}private:T *pointee;template<class T> friend class auto_ptr<U>;};
0 0
- 智能指针的实现
- 智能指针的实现
- 智能指针的实现
- 智能指针的实现
- 智能指针的实现
- 智能指针的简单实现
- 智能指针的类实现
- C++ 智能指针的实现
- 智能指针的部分实现
- 智能指针的一种实现
- c++智能指针的实现
- 智能指针的一种实现
- 智能指针的简单实现
- C++智能指针的实现
- 智能指针的实现机理
- 【C++】智能指针的实现
- 智能指针的实现尝试
- 智能指针的简单实现
- 已测试转开发,博客回归,在路上。
- HexConversion 二进制 八进制 十六进制 十进制
- MYSQL触发器
- Speex 回声消除
- camera 模组驱动优化
- 智能指针的实现
- Java 开发 2.0: 现实世界中的 Redis
- CentOS 6.4 简单方法升级PHP到PHP 5.3.3
- Ubuntu12.04.3 配置nginx-rtmp支持HLS
- 云计算之现状
- iOS Crash文件分析
- 【cv】使用opencv的FeatureDetector,DescriptorExtractor,DescriptorMatcher
- python 多进程通信模块
- 虚拟化技术系列--openvswitch介绍