[modern c++] 的智能指针 shared_ptr / unique_ptr / weak_ptr

本文介绍C++中智能指针shared_ptr、unique_ptr和weak_ptr的基本用法及注意事项,包括使用make_shared创建对象、计数器原理、weak_ptr的作用及如何避免悬空指针。

前言:

  1. 使用 普通指针/其他已存在的智能指针/其他已存在的普通指针,对当前创建的智能指针进行初始化。            (创建 指针 指向当前已有内存)
  2. 使用 make_shared 创建全新的内存区,然后创建一个全新的智能指针指向它。     (创建 内存空间 和 指针)
  3. 使用 智能指针的 reset 方法来进行 智能指针的 重定向 和 释放。              (重定向 和 销毁)

std::shared_ptr - cppreference.com

std::unique_ptr - cppreference.com




智能指针

智能指针有两种: shared_ptr  和  unique_ptr,这两种指针都是模板类,原型为   xxx_ptr<T>

(!)注:智能指针是用来管理堆内存的,不是作为指针使用的。

(!)智能指针是使用delete来释放内存,所以释放内存时的特性和delete一样。

int i = 100;    //或者其他类,比如 classA a;
shared_ptr<int> sp  = make_shared<int>(i);

上述语句实际上是使用i的值作为新分配内存的初始值。sp并没有指向i,而是指向了新分配的堆,这个堆存放int型的数值100。上述语句不能算错误,但是需要理解  make_shared 动作实际上是取堆里申请了内存的。

可以这样理解,make_shared 相当于 new ,尖括号指定需要分配内存的类型名,小括号指定作为拷贝构造传递给类型名的值,如果不指定,那么使用类型的默认构造。

classA *pa = new classA();
shared_ptr<classA> sp = make_shred<classA>(*pa)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值