数据结构C语言实现准备工作一智

北京雀斑医院那家好 http://pf.39.net/bdfyy/bdfhl/

数据结构C++语言实现系列文章的代码实现不使用STL库,在智能指针、异常类、顶层父类三大基础类上进行代码实现,本文介绍智能指针类。

.C++语言存在的问题

C++语言中没有垃圾回收机制,指针无法控制所指堆空间的生命周期,如果在动态申请堆空间后不释放堆空间,就会造成内存泄漏。

2.解决内存泄漏的方案

C++语言中提供了智能指针的方案解决内存泄漏的问题。使用智能指针,在指针生命周期结束时主动释放堆空间,一片堆空间最多由一个指针标识,同时杜绝指针运算和指针比较。

3.智能指针的设计方案

通过类模板(泛型编程)描述指针的行为,使用类模块就能够定义不同的指针对象。重载指针操作符”-”和”*”,利用智能指针对象模拟原生指针的行为。

4.智能指针实例

#ifndefSMARTPOINTER_H_INCLUDED#defineSMARTPOINTER_H_INCLUDED#includeiostreamusingnamespacestd;templatetypenameTclassSmartPointer{protected:T*m_pointer;public:SmartPointer(T*p=NULL){this-m_pointer=p;cout"constructfunction:SmartPointer()"endl;}SmartPointer(constSmartPointerTobj){this-m_pointer=obj.m_pointer;const_castSmartPointerT(obj).m_pointer=NULL;cout"copyconstructfunction:SmartPointer(constSmartPointerTobj)"endl;}SmartPointerToperator=(constSmartPointerTobj){if(this!=obj){deletem_pointer;this-m_pointer=obj.m_pointer;const_castSmartPointerT(obj).m_pointer=NULL;}cout"copyoperation=function:SmartPointerToperator=(constSmartPointerTobj)"endl;return*this;}T*operator-(){returnm_pointer;}Toperator*(){return*m_pointer;}T*get(){returnm_pointer;}boolisFull(){return(m_pointer==NULL);}~SmartPointer(){cout"deconstructfunction:~SmartPointer()"endl;deletem_pointer;}};#endif//SMARTPOINTER_H_INCLUDED

#includeiostream#include"SmartPointer.h"usingnamespacestd;classTest{public:Test(intnum=0):i(num){cout"constructfunction:Test()"endl;}Test(Testobj){cout"copyconstructfunctionTest(Testobj)"endl;this-i=obj.value();}~Test(){cout"deconstructfunction:~Test()"endl;}intvalue(){returnthis-i;}private:inti;};intmain(){SmartPointerTestsp=newTest(3);coutsp-value()endl;cout(*sp).value()endl;SmartPointerTestnp;np=sp;coutnp-value()endl;cout(*np).value()endl;coutsp.isFull()endl;coutnp.isFull()endl;return0;}5.智能指针的使用限制

智能指针只能用来指向堆空间中的单个对象或者变量,智能指针不能用来指向堆空间中的一个数组,也不能指向一个局部的对象或变量。

6.小结

()指针特征操作符(-和*)可以被重载

(2)重载指针特征符能够使用对象代替指针

(3)智能指针只能用于指向堆空间中的内存

(4)智能指针的意义在于最大程度的避免内存问题

参考资料:《C++primer》

《C++对象模型》

狄泰软件学院唐佐林老师课程

End

欢迎点赞,


转载请注明:http://www.aierlanlan.com/rzgz/325.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了