【C++】智能指针简述(一):智能指针的引入
2024-09-22 10:25:22
智能指针是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
最新文章
- 安装CentOS、Linux系统时,GPT分区不能引导的解决方法
- BZOJ 3926: [Zjoi2015]诸神眷顾的幻想乡
- 使用Kylin构建企业大数据分析平台的4种部署方式
- jQuery--选择器总结
- 探索Windows 8.1 Update 新功能点
- PostScript的简单例子-用粗线画一个圆
- PhpStorm的注册码、Key
- 李洪强漫谈iOS开发[C语言-023]-取余数运算符
- hadoop如何计算map数和reduce数(未读)
- Linux实现SSH无密码登录(对目录权限的设置非常详细,可以参考一下)
- 如何在你的project中使用support library【转】
- 学习JAVA的几大优处
- WinDbg调试C#技巧,解决CPU过高、死锁、内存爆满
- JVM读书笔记之垃圾收集与内存分配
- ibatis项目启动报错The string ";--"; is not permitted within comments【原】
- LINQ学习之旅 C#3.0新特性(一)
- JS数组和对象的浅拷贝和深拷贝
- 关于ST-Link下载STM32程序的使用
- 【转】Swig使用指南
- Orz YYB!