zoukankan      html  css  js  c++  java
  • 【C++】智能指针简述(一):智能指针的引入

      智能指针是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

  • 相关阅读:
    2019北航软工暑期班作业-IDE的安装与初步使用(Visual Studio版)
    java——线性表接口实现
    CCF——相邻数对201409-1
    CCF——门禁系统201412-1
    CCF——图像旋转201503-1
    CCF——数列分段201509-1
    CCF——数位之和201512-1
    CCF——折点计数201604-1
    Java String简单知识点总结
    無题
  • 原文地址:https://www.cnblogs.com/qq329914874/p/6653412.html
Copyright © 2011-2022 走看看