智能指针
2016-01-10 12:30
337 查看
C++中智能指针能够防止出现野指针、内存泄露等情况,智能指针的类中包括4个函数:构造函数、拷贝构造函数、重载复制操作符、析构函数。构造函数须要对引用计数和指针进行初始化,引用计数初始化为1,拷贝构造函数完毕对象之间的拷贝,要注意引用计数的变化和推断两个指针是否指向同样的内存。
重载复制操作符。须要推断的情况是左值代表的指针假设引用计数减为0。要释放对应的内存,避免发生内存泄露。析构函数中先推断引用计数是否为0,引用计数为0时再释放对应的内存。
重载复制操作符。须要推断的情况是左值代表的指针假设引用计数减为0。要释放对应的内存,避免发生内存泄露。析构函数中先推断引用计数是否为0,引用计数为0时再释放对应的内存。
# include <iostream> # include <cstdlib> using namespace std; template <typename T> class smartptr { public: smartptr(T *p):use(1),ptr(p){;} smartptr(const smartptr<T> &p); smartptr<T> & operator =( smartptr <T>& p); ~smartptr() { if(--(*this).use==0) { delete ptr; cout<<"deconstructor"<<endl; } ptr=NULL; } private: int use; T *ptr; }; template<class T> smartptr<T>::smartptr(const smartptr<T> &p) { this->ptr=p.ptr; this->use=p.use; this->use++; } template<class T> smartptr<T> & smartptr<T>::operator =( smartptr <T>& p) { if(this!=&p) { if(--(*this).use==0) delete ptr; this->ptr=p.ptr; this->use=p.use; this->use++; } return *this; } int main() { int *t=new int(3); int *p=new int(4); smartptr <int > p1(t); smartptr<int> p2(p1); smartptr<int> p3=p1; smartptr<int> p4(p); p4=p1; system("pause"); return 0; }
相关文章推荐
- 【慕课笔记】第二章 变量和常量 第10节 如何在Java中使用注释
- Mysql中文乱码问题完美解决方案
- RxJava基础
- iOS- 如何集成支付宝
- JSP自定义标签——简单标签(1)
- maven学习-properties标签的使用
- Mysql 使用with rollup对聚合结果进行聚合
- 三星N8000/N8010通用刷机教程
- IP选路
- ICMP——Internet控制报文协议
- 总结
- js的效率问题
- 图片下载—>显示封装类思路
- Beta版本发布说明
- 【慕课笔记】第二章 变量和常量 第9节 Java常量的应用
- Activity 学习笔记
- 机器学习(六):线性回归及梯度下降
- Java集合类汇总记录-- apache.commons4(TreeList)
- Spark Standalone Mode 安装
- M2阶段事后总结