标签:cat 动态 引入 world 智能指针 ... int 自己 退出
智能指针是C++中一种利用RAII机制(后面解释),通过对象来管理指针的一种方式.
在C++中,动态开辟的内存需要我们自己去维护,在出函数作用域或程序异常退出之前,我们必须手动释放掉它,否则的话就会引起内存泄漏.
例如:我们用指针变量来创建对象时,需要手动来删除它
string * pstr = new string("hello world!"); .... delete pstr;
事实上,即使我们非常谨慎,但有时候的一些情况仍然会让我们防不胜防:
//情况一:在程序某个分支内,忘记释放内存 void FunTest1(){ int *pArr = new int[10]; FILE* pFile = fopen("test.txt","r"); if(pFile==NULL){ return ; } //..... //处理其他代码 //..... if(pArr!=NULL){ delete[] pArr; pArr = NULL; } }
//情况二:当程序抛出异常时,忘记了释放内存 void FunTest2(){ int *pArr = new int[10]; try{ //... //其他代码 //... }catch(...){ return ; } if(pArr!=NULL){ delete[] pArr; pArr = NULL; } }
每次动态开辟内存,都要手动去释放,稍不留神,就会造成内存泄漏.(代码一多,逻辑一复杂,吓得我都不敢动态开辟内存了!)
那么,我自然就傻傻地期望着:如果有一个什么东西可以管理指针,让它在出函数作用域时或者异常结束前自动释放内存,岂不是美滋滋?
因此,我们引入RAII(资源的获取就是初始化)机制:通过类来封装指针,在构造函数中完成资源的初始化,在析构函数中完成资源的清理及汕尾工作.
欲知后事如何,且听下回分解:智能指针详解之auto_ptr
标签:cat 动态 引入 world 智能指针 ... int 自己 退出
原文地址:http://www.cnblogs.com/qq329914874/p/6653412.html