1. 构造函数

shared_ptr p(u)

p从unique_ptr u中接管了对象的所有权;将u置为空

template <class _Ux, class _Dx,enable_if_t<conjunction_v<_SP_pointer_compatible<_Ux, _Ty>,is_convertible<typename unique_ptr<_Ux, _Dx>::pointer, element_type*>>,int> = 0>shared_ptr(unique_ptr<_Ux, _Dx>&& _Other) {using _Fancy_t   = typename unique_ptr<_Ux, _Dx>::pointer;using _Raw_t     = typename unique_ptr<_Ux, _Dx>::element_type*;using _Deleter_t = conditional_t<is_reference_v<_Dx>, decltype(_STD ref(_Other.get_deleter())), _Dx>;const _Fancy_t _Fancy = _Other.get();if (_Fancy) {const _Raw_t _Raw = _Fancy;const auto _Rx    = new _Ref_count_resource<_Fancy_t, _Deleter_t>(_Fancy, _Other.get_deleter());_Set_ptr_rep_and_enable_shared(_Raw, _Rx);_Other.release();//将u置为空}}

1.1 _Ref_count_resource

// CLASS TEMPLATE _Ref_count_resource
template <class _Resource, class _Dx>
class _Ref_count_resource : public _Ref_count_base { // handle reference counting for object with deleter
public:_Ref_count_resource(_Resource _Px, _Dx _Dt): _Ref_count_base(), _Mypair(_One_then_variadic_args_t{}, _STD move(_Dt), _Px) {}#ifdef __EDG__ // TRANSITION, VSO-1292293virtual ~_Ref_count_resource() noexcept override {} // TRANSITION, should be non-virtual
#else // ^^^ workaround / no workaround vvvvirtual ~_Ref_count_resource() noexcept override = default; // TRANSITION, should be non-virtual
#endif // ^^^ no workaround ^^^virtual void* _Get_deleter(const type_info& _Typeid) const noexcept override {#if _HAS_STATIC_RTTIif (_Typeid == typeid(_Dx)) {return const_cast<_Dx*>(_STD addressof(_Mypair._Get_first()));}
#else // _HAS_STATIC_RTTI(void) _Typeid;
#endif // _HAS_STATIC_RTTIreturn nullptr;}private:virtual void _Destroy() noexcept override { // destroy managed resource_Mypair._Get_first()(_Mypair._Myval2);}virtual void _Delete_this() noexcept override { // destroy selfdelete this;}_Compressed_pair<_Dx, _Resource> _Mypair;
};

c++新特性11 (10)shared_ptr六”构造函数unique_ptr参数“相关推荐

  1. c++新特性11 (10)shared_ptr七reset

    1. 使用场景 p.reset() 若p是唯一指向其对象的shared_ptr,reset会释放此对象. p.reset(q) 释放原有对象的同时,若传递了可选的内置参数指针q,会令p指向q,否则会将 ...

  2. c++新特性11 (10)shared_ptr一”概述“

  3. python 3.0 print_Python 3.x 新特性及10大变化

    python 3.x 起始版本是Python 3.0,目前的最新版本是 3.3.3 Python之父Guido van Rossum谈到了Python 3.0的构思: 一直以来,除非要打破向后兼容性, ...

  4. c++新特性11 (12)weak_ptr类定义

    1. 类定义 // CLASS TEMPLATE weak_ptr template <class _Ty> class weak_ptr : public _Ptr_base<_T ...

  5. c++新特性11 (6) =default

    1. 使用=default来要求编译器生成一个默认构造函数 struct Point{ Point() = default;//不用像下面的构造函数一样要一一对成员变量赋值Point(int _x, ...

  6. c++新特性11 (11)unique_ptr

    有一个_Compressed_pair成员,类似于pair<key,value>队 // CLASS TEMPLATE unique_ptr SCALAR template <cla ...

  7. c++新特性11 (9)智能指针一”_Compressed_pair类“

    功能类似std::pair类,但是是派生关系, key 类有一个value对象 template <class _Ty1, class _Ty2, bool = is_empty_v<_T ...

  8. MySQL8.0 - 新特性 - 说说InnoDB Log System的隐藏参数

    InnoDB在设计lock-free的log system时,除了已有的参数外,还通过宏控制隐藏了一些参数,如果你使用源码编译时,打开cmake选项-DENABLE_EXPERIMENT_SYSVAR ...

  9. JavaScript6、7、8、9、10、11新特性

    目录 1.ECMAScript6新特性 1.1.let 关键字 1.1.1.不允许重复声明 1.1.2.块级作用域 1.1.3.不存在变量提升 1.1.4.不影响作用域链 1.2.const 关键字 ...

最新文章

  1. Ubuntu 修改时区和时间
  2. python 检测四边形,并矫正
  3. 网络公司千千万,放心委托看这里!
  4. java基础语法学习
  5. 项目管理基础:系统切换相关知识笔记
  6. 【Python3网络爬虫开发实战】 1.7.1-Charles的安装
  7. Asp.Net 4.0 新特性 系列 之一 从页面标记%%说起
  8. NGUI的输入框制作(attach- input filed script的使用)
  9. Cisco防火墙概述和产品线
  10. MatConvNet训练自己的网络
  11. 虚拟交换系统-VSS
  12. 计算机无法找到输出设备,电脑没声音找不到输出设备怎么办
  13. 【jqxGrid】jqwidgets.createInstance()方法报错的一种解决方法
  14. win8 报file://CBD 0xc0000034 蓝屏
  15. win10 win11关睿频(打开隐藏的“处理器性能提升模式”)
  16. JS ListBox动态加载数据
  17. 编写一个求x的n次方的函数
  18. 3GPP TS 29244-g30 中英文对照 | 5.4.14 Deferred PDR activation and deactivation
  19. OriginPro绘图过程中遇到的问题及解决办法
  20. webpack-dev-server filename中的路径问题,IntelliJ IDEA local history有效期设置,标签顺序设置,dva call put 解构

热门文章

  1. websocket导致spring boot 项目单元测试启动失败的问题解决
  2. 【Python】青少年蓝桥杯_每日一题_3.05_排列组合
  3. mongodb 服务器时区设置_关于MongoDB-Balancer设置时间窗口的问题
  4. grafana导入json文件没有数据_XAMPP客户端环境无法导入较大Mysql数据库文件的解决方法...
  5. 数据中心架构有哪些组件?
  6. 如何面对边缘计算10个痛点?
  7. 大数据时代数据中心的发展思考
  8. Algorithm:数学建模大赛(国赛和美赛)的简介/内容、数学建模做题流程、历年题目类型及思想、常用算法、常用工具之详细攻略
  9. 成功解决xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; found b‘Debug is
  10. 成功解决internal/modules/cjs/loader.js:596 throw err; ^ Error: Cannot find module 'express'