• 【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

  • 相关阅读:
    编程之美 2014资格赛 格格取数
    ios游戏开发--cocos2d学习(1)
    ios开发中常用的也是最基本的mysql语句
    无限树形结构的数据库表设计
    认真的辞职
    几种JavaScript富应用MVC MVVM框架
    javascript创建对象和属性的几种方式
    webresource.axd文件的配置及使用
    ITextSharp用来生成 PDF 的一个组件
    flexpaper 开源轻量级的在浏览器上显示各种文档的组件
  • 原文地址:https://www.cnblogs.com/qq329914874/p/6653412.html
Copyright © 2020-2023  润新知