您当前的位置: 首页 > 

我什么都布吉岛

暂无认证

  • 2浏览

    0关注

    292博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

智能指针(二)智能指针的方法和构造

我什么都布吉岛 发布时间:2020-05-30 00:09:41 ,浏览量:2

一、方法构造
  • 构造函数

默认构造shared_ptr spunique_ptr up

指针构造shared_ptr sp(T *)unique_ptr up(T *),这里默认为explicit

带删除器的构造shared_ptr p(q,d) q这里可以内置指针和智能指针,同时将用d析构器代替delete。所以定义了这么一个带删除器的构造函数,是因为兼容没有定义析构函数的类。

  • 拷贝构造 注意到指针构造函数被声明为explicit,意味着我们删除了指针形式的任何拷贝构造函数。
shared_ptr sp=new T;//error
unique_ptr up=new T;//error
shared_ptr sp1(sp2);//ok,没有发生隐式转换
unique_ptr up1(up2);//not ok,没有拷贝构造
  • 赋值操作
sp1=sp2;
up1=up2;//deleted funciton,not ok
  • 解引用操作 *sp *up

  • get()方法

p.get()返回一个与智能指针指向相同的内置指针

  • reset()方法

reset有多个重载形式,分别是p.reset() p.reset(q) p.reset(q,d),作用是将一个智能指针重置为内置空指针(或q指针)

  • ->mem操作 指针指针指向对象中的成员

  • 指针交换操作 swap(p,q) p.swap(q) 完成指针指向对象的交换

  • 隐式转换 定义了智能指针到bool的隐式转换,spup在作为条件时都会被隐式转换为bool

二、作为共享指针的一些特殊成员
  • p.use_count() p指向对象对应的引用计数,可能很慢,主要用于调试
  • p.unique() 对象是否只有一个引用计数
make_shared最安全的分配方法[1]

shared_ptr sp=make_shared(args)make_unique(c++14)make_unique_default_init(c++20)

[1]相对于直接使用指针来进行构造

关注
打赏
1658157489
查看更多评论
立即登录/注册

微信扫码登录

0.0359s