1.智能指针为什么存在?
因为C++没有自动回收内存的机制,因此每一次new出来的动态内存必须手动delete回去。因此智能指针可以解决这个问题。
2.智能指针的大致描述是什么?
智能指针:自动负责释放所指向的对象,实际上它利用了栈的机制,每一个智能指针都是一个模板类,调用智能指针实际上是创建了一个智能指针的对象,对象生命周期到达尽头的时候,会自动调用智能指针的析构函数,在析构函数里,释放掉它管理的内存,从而避免手动delete。
3.三大类智能指针是什么?
指针 |
简要描述 |
shared_ptr |
允许多个指针指向同一个对象 |
unique_ptr |
独占所指向的对象 |
weak_ptr |
shared_ptr的弱引用 |
shared_ptr描述(in memory):
shared_ptr是一个标准的共享所有权的智能指针,就是允许多个指针指向同一对象,shared_ptr对象中不仅有一个指针指向某某(比如 int型,以下也拿int类型举例)对象,还拥有一个引用计数器,代表一共有多少指针指向了那个对象。
shared_ptr自动销毁所管理的对象
每当创建一个shared_ptr的对象指向int型数据,则引用计数器值+1,每当销毁一个shared_ptr对象,则-1.当引用计数器数据为0时,shared_ptr的析构函数会销毁int型对象,并释放它占用的内存。
shared_ptr和new的配合使用
接受指针作为参数的智能指针的构造函数是explicit类型,意味着只能以初始化的方式定义。
定义方法:
shared_ptr<int> p1;
//被初始化成为一个空指针
shared_ptr<int> p2 (new int(