shared_ptr

智能指针(模板类)
shared_ptr

  • 默认初始化的指针包含一个空指针(nullptr CP48),可以用new返回的指针来初始化智能指针。接收指针参数的智能指针的构造函数是explict,所以必须使用直接初始化的形式。CP412
shared_ptr<int> p1(new int(1024));
p.reset(q);//p会从q中接管对象的所有权,当p是唯一指向原本对象的指针时,释放对象。
  • 当某个函数的参数列表需要智能指针的形参,先以独立语句的形式将newd对象存储于智能指针内,再送入该函数。由于编译器核算被传入参数列表的实参的顺序并不确定,如果在参数列表内进行动态分配,核算实参时发生异常可能会造成内存泄漏
    E17

  • 最好使用make_shared函数进行内存分配

auto p=make_shared<对象类型>(初始化的值);
  • 允许多个指针指向同一对象。每个shared_ptr都有reference count(引用计数)用于统计指向动态分配对象的指针个数。在不使用智能指针后记得删除指针。
    +1:初始化;参数传递;函数返回值
    -1:赋新值;指针被销毁
    引用计数为0时自动销毁对象

  • 即使函数发生异常(在资源分配时或者在分配和释放之间)后退出,智能指针被销毁时会递减引用计数,如果为0能够正常释放内存,但是普通指针在此情况下不会释放内存。CP415

  • 当shared_ptr指向1个没有析构函数的类型,通过deleter(删除器)函数来代替delete操作。CP416

//connection类型没有没有析构函数,该删除器函数接受connection *的指针
void end_connection(connection *p){ diconnect(*p); }
//创建智能指针时传递一个删除器函数
connection c;
shared_ptr<connection> p(&c,end_connection);
  • get函数只用于当需要向不能使用智能指针的函数传递一个内置指针(显示转换)。CP414 E15
p.get();//返回智能指针p中保存的指针             
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值