一、为什么要有智能指针
内存泄露是我们开发大型项目时最为头疼的问题,当我们将对象建立在堆上时,因为需要我们自己手动释放,因此避免不了忘记删除,或者删除时没有考虑清楚情况的问题,从而造成悬挂指针或者是野指针的问题。
二、智能指针是什么
简单理解的话,智能指针采用RAII机制。即智能指针虽然是以指针的方式运作,但是实际上是一个对象,在自己生命周期结束后,会自动释放掉,这样的话就不用让开发人员时刻把心思放在释放对象这个问题上了,也降低了内存泄漏的概率。
在C++中,智能指针一共定义了4种:
auto_ptr、unique_ptr、shared_ptr 和 weak_ptr。 其中,auto_ptr在C++11种已经摒弃掉,在C++17中已经废除不可用。
三、智能指针
1、unique_ptr
指针p在运行完test()函数后会直接释放掉。
需要注意的是,unique_ptr并没有负责复制的构造函数,因此不支持拷贝和赋值操作。原因是unique_ptr会独享p1的所有权,如果p2和p3失去p1的所有权时(即p1释放掉)会delete p1两次,p1释放一次,p2释放会再次delete p1一次。
虽然不能够拷贝和赋值操作,但是可以将p1的所有权转移给p2管理,使用std::move函数即可。
unique最常见的使用场景,就是替代原始指针,为动态申请的资源提供异常安全保证。
#include<iostream>
#include<vector>
using namespace std;
class Test
{
public:
void add();<