【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

posted @ 2017-03-31 20:40  C/C++专题  阅读(640)  评论(0编辑  收藏  举报