概念:
在C++中使用堆内存是非常频繁的操作,我们需要new去分配内存空间,用完了之后我们要delete释放它,堆内存的申请和释放都是由程序员自己手动完成的。程序员自己管理堆内存可以提高程序的效率,但是总体而言内存管理是一件十分复杂的事情,C++11中引入了智能指针的概念,方便管理堆内存。使用普通的指针,容易造成内存泄漏(忘记释放),二次释放,程序发生异常的时候内存泄漏,因此使用智能指针能够更好的管理堆内存。
内存泄露:指的是申请完内存空间忘记释放,导致可用的内存越来越少。
内存溢出:数据超过某一块内存的大小会修改到别的内存。
new 关键字,假设T是一个类,那么我们常用下面的写法:
T*ptr = new T();
用new在堆上创建一个对象,发生了什么呢?具体过程如下:
1)调用 operator new 分配内存空间,operator new (sizeof(T))
2) 调用类的构造函数T()
3)返回正确的指针
智能指针和普通指针的区别是智能指针在普通指针的基础上加了一层封装机制,这样的一层封装机制的目的是为了智能指针可以很方便的管理一个对象的生命周期。
为了理解智能指针基本工作原理,我们看一下下面的例子:
clas