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

最新文章

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

热门文章

  1. POJ3977 Subset 折半枚举
  2. Python标准库:内置函数tuple([iterable])
  3. POJ 1849 Two(遍历树)
  4. 怎样在win8系统下建立wifi热点
  5. libjpeg交叉编译
  6. ngnix 详解
  7. mysql与mongoDB的特点和优劣
  8. 【USACO 2017Feb】 Why Did the Cow Cross the Road
  9. 【BZOJ 5165】 树上倍增
  10. python time 时间模块