【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

原文链接: https://www.cnblogs.com/qq329914874/p/6653412.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    【C++】智能指针简述(一):智能指针的引入

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/251748

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月14日 上午5:31
下一篇 2023年2月14日 上午5:32

相关推荐