C++11 智能指针概述
0.什么是智能指针? 智能指针是一种用来管理资源指针的特殊对象,对象中有一个成员变量用来保存动态创建的裸指针,通过重载operator->方法实现类似于裸指针的使用方式。 1.智能指针的作用是什么? 我们平时使用C++编写代码时,动态内存管理是我们时刻关注的重点。动态内存管理不好,容易出现下述三类问题: 1、野指针(空悬指针) 一些内存单元已经被释放,但是指向这些内存的指针还在使用,这些已经释放的内存有可能被系统重新分配给应用使用,此时再使用野指针,会造成无法预测的错误。 int *p = new int(10); delete p; // 释放后再次访问,无法预测结果 cout << *p << endl; 2、重复释放 程序试图释放已经被释放的资源,或者已经被重新分配的资源。 int *p = new int(10); delete p; // 重复释放,运行时报错 delete p; 3、内存泄露 不再使用的动态内存没有进行释放,便会造成内存泄露。如果程序多次存在内存泄露行为,会导致内存占用急剧增长,最终程序会因为无法申请到足够的空闲内存而异常退出。 void TestRelease() { int* p = new int(10); // 未释放p return; } 这三类问题严重影响程序的高可用性。但是像JAVA这样的语言不会存在这样的问题