shared_ptr 别名构造函数

2023-11-23

关于关注的问题shared_ptr构造函数:

template< class Y >
shared_ptr( const shared_ptr<Y>& r, T *ptr );

我是否正确,如果r使用用户提供的删除器创建,然后使用别名shared_ptr知道这一点。所以如果别名shared_ptr是组中的最后一个并且(超出范围时)会破坏最初由r,它会使用用户提供的删除器吗?


Example:

#include <iostream>
#include <iomanip>

struct some_type
{
    int i;
};

void my_deleter(some_type* p)
{
std::cout << "my_deleter called!" << std::endl;
    delete p;
}

#include <memory>
int main()
{
    std::shared_ptr<int> pm;

    {
        // Note: better use make_shared
        auto x = new some_type;
        // create a shared_ptr that owns x and a deleter
        std::shared_ptr<some_type> r(x, &my_deleter);
        std::cout << r.use_count() << std::endl;

        // share ownership of x and the deleter with pm
        pm = std::shared_ptr<int>(r, &r->i);
        std::cout << r.use_count() << std::endl;

        // r gets destroyed
    }
    std::cout << pm.use_count() << std::endl;
    std::cout << "get_deleter == 0? " << std::boolalpha
              << (nullptr == std::get_deleter<decltype(&my_deleter)>(pm))
              << std::endl;
}

Output:



1
2
1
get_deleter == 0? false
my_deleter called!
  

注意:我无法使用自由函数编译这个示例my_deleter,免费时存在一些铸造错误get_deleter函数(尝试从void*到带有 a 的函数指针类型static_cast).


别名演员: [util.smartptr.shared.const]/13-14

template<class Y> shared_ptr(const shared_ptr<Y>& r, T *p) noexcept;

13 Effects:构造一个shared_ptr存储的实例p and 股权 with r.

14 后置条件: get() == p && use_count() == r.use_count()

带有用户提供的删除器的 Ctor: [util.smartptr.shared.const]/9

模板shared_ptr(Y* p, D d);

Effects:构造一个shared_ptr反对owns物体p和删除器d.

博士: [util.smartptr.shared.dest]/1

〜shared_ptr();

1 Effects:

  • If *this is empty或与他人共享所有权shared_ptr实例 (use_count() > 1),没有副作用。
  • 否则,如果*this owns一个东西p和一个删除器d, d(p)叫做。
  • 否则,*this owns一个指针p, and delete p叫做。

将它们结合起来(让我们跳过赋值运算符):

  • The shared_ptr实例r owns对象和删除器。
  • 别名 ctor 让新的shared_ptr实例股权 with r(即对于对象和删除器两者)。
  • When the dtor of this new instance is called (or an assignment operator),
    • If use_count > 1,没有影响。
    • 否则,这个例子owns该对象r指向and删除器(如果有)并且将使用此删除器(如果存在)或delete在所指向的对象上。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

shared_ptr 别名构造函数 的相关文章

  • 在 LINQ 查询中返回不带时间的日期

    我正在编写一个查询 我想计算按日期联系我们的呼叫中心的次数 看起来很简单 但由于联系日期字段是日期时间字段 我得到了时间 因此当我按联系日期 时间 分组时 每个联系日期实例的计数为 1 所以 我想只按日期分组 而不按时间分组 下面是我用来查
  • 模板类的不明确多重继承

    我有一个真实的情况 可以总结为以下示例 template lt typename ListenerType gt struct Notifier void add listener ListenerType struct TimeListe
  • C++ 求二维数组每一行的最大值

    我已经设法用这个找到我的二维数组的每一行的最小值 void findLowest int A Cm int n int m int min A 0 0 for int i 0 i lt n i for int j 0 j lt m j if
  • fgets() 和 Ctrl+D,三次才能结束?

    I don t understand why I need press Ctrl D for three times to send the EOF In addition if I press Enter then it only too
  • Cygwin 下使用 CMake 编译库

    我一直在尝试使用 CMake 来编译 TinyXML 作为一种迷你项目 尝试学习 CMake 作为补充 我试图将其编译成动态库并自行安装 以便它可以工作 到目前为止 我已经设法编译和安装它 但它编译成 dll 和 dll a 让它工作的唯一
  • 为什么 POSIX 允许在只读模式下超出现有文件结尾 (fseek) 进行搜索

    为什么寻找文件结尾很有用 为什么 POSIX 让我们像示例中那样在以只读方式打开的文件中进行查找 c http en cppreference com w c io fseek http en cppreference com w c io
  • 为什么禁止在 constexpr 函数中使用 goto?

    C 14 对你能做什么和不能做什么有规则constexpr功能 其中一些 没有asm 没有静态变量 看起来相当合理 但标准也不允许goto in constexpr功能 即使它允许其他控制流机制 这种区别背后的原因是什么 我以为我们已经过去
  • HttpClient 像浏览器一样请求

    当我通过 HttpClient 类调用网站 www livescore com 时 我总是收到错误 500 可能服务器阻止了来自 HttpClient 的请求 1 还有其他方法可以从网页获取html吗 2 如何设置标题来获取html内容 当
  • 基于范围的 for 循环中的未命名循环变量?

    有没有什么方法可以不在基于范围的 for 循环中 使用 循环变量 同时也避免编译器发出有关未使用它的警告 对于上下文 我正在尝试执行以下操作 我启用了 将警告视为错误 并且我不想进行像通过在某处毫无意义地提及变量来强制 使用 变量这样的黑客
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • .Net Core / 控制台应用程序 / 配置 / XML

    我第一次尝试使用新的 ConfigurationBuilder 和选项模式进入 Net Core 库 这里有很多很好的例子 https docs asp net en latest fundamentals configuration ht
  • 是否有比 lex/flex 更好(更现代)的工具来生成 C++ 分词器?

    我最近将源文件解析添加到现有工具中 该工具从复杂的命令行参数生成输出文件 命令行参数变得如此复杂 以至于我们开始允许它们作为一个文件提供 该文件被解析为一个非常大的命令行 但语法仍然很尴尬 因此我添加了使用更合理的语法解析源文件的功能 我使
  • 用 C 实现 Unix shell:检查文件是否可执行

    我正在努力用 C 语言实现 Unix shell 目前正在处理相对路径的问题 特别是在输入命令时 现在 我每次都必须输入可执行文件的完整路径 而我宁愿简单地输入 ls 或 cat 我已经设法获取 PATH 环境变量 我的想法是在 字符处拆分
  • 可空属性与可空局部变量

    我对以下行为感到困惑Nullable types class TestClass public int value 0 TestClass test new TestClass Now Nullable GetUnderlyingType
  • 什么是 C 语言的高效工作流程? - Makefile + bash脚本

    我正在开发我的第一个项目 该项目将跨越多个 C 文件 对于我的前几个练习程序 我只是在中编写了我的代码main c并使用编译gcc main c o main 当我学习时 这对我有用 现在 我正在独自开展一个更大的项目 我想继续自己进行编译
  • char指针或char变量的默认值是什么[重复]

    这个问题在这里已经有答案了 下面是我尝试打印 char 变量和指针的默认值 值的代码 但无法在控制台上看到它 它是否有默认值或只是无法读取 ASCII 范围 include
  • ListDictionary 类是否有通用替代方案?

    我正在查看一些示例代码 其中他们使用了ListDictionary对象来存储少量数据 大约 5 10 个对象左右 但这个数字可能会随着时间的推移而改变 我使用此类的唯一问题是 与我所做的其他所有事情不同 它不是通用的 这意味着 如果我在这里
  • 在Linux中使用C/C++获取机器序列号和CPU ID

    在Linux系统中如何获取机器序列号和CPU ID 示例代码受到高度赞赏 Here http lxr linux no linux v2 6 39 arch x86 include asm processor h L173Linux 内核似
  • 将 viewbag 从操作控制器传递到部分视图

    我有一个带有部分视图的 mvc 视图 控制器中有一个 ActionResult 方法 它将返回 PartialView 因此 我需要将 ViewBag 数据从 ActionResult 方法传递到 Partial View 这是我的控制器
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但

随机推荐

  • 如何将 R Markdown 转换为 HTML?即,“Knit HTML”在 Rstudio 0.96 中做什么?

    在 Rstudio 0 96 中的 R Markdown 文件上按 Knit HTML 时会运行哪些命令 我的动机是 当我在另一个文本编辑环境中时 我可能想运行相同的命令 或者我可能想将命令组合到更大的文本编辑器中 makefile 基本脚
  • 使用 Plink (PuTTy) 通过 Python 进行 SSH

    我正在尝试编写一个 python 脚本 它将通过 SSH 连接到服务器并执行命令 我在 Windows 上使用 Python 2 6 并安装了 plink 和 paegent 用于 ssh 密钥 并将它们全部添加到我的路径中 如果我转到命令
  • 改造 - 多部分请求:所需的 MultipartFile 参数“文件”不存在

    我正在尝试使用 Retrofit2 在服务器上发送文件 我按照文档做了一切 但总是收到 400 服务器错误 我尝试这样做 RequestBody body RequestBody create MediaType parse image p
  • 在括号中显示 p 值而不是 SE

    当使用stargazer包中 我想更改系数下括号中出现的值 默认情况下 包将输出标准错误 如何将实际 p 值包含在括号中 正如中提到的Stargazer 省略测试统计 从5 0版本开始stargazer已包括report允许用户选择要报告哪
  • 如何在自托管 Windows 代理上从 Azure DevOps 管道运行 Azure CLI 任务?

    情况 我的自托管 Windows 代理运行来自 Azure DevOps 的管道 到 管理 Azure 中的资源 我想使用 Azure CLI 任务 即使在前面的步骤中安装了 Azure CLI AzureCLI 任务也会失败 我有两个从我
  • 以编程方式执行单击 Actor libgdx

    我的问题很简单 我有一些ClickListener添加到 Actor 中 我想以编程方式对它们执行单击事件 就像是myActor performClick 您还可以使用 InputEvent event1 new InputEvent ev
  • 获取 SelectOneMenu 的选定值

    我正在 jsf 页面上测试组件 SelectOneMenu 我通过我的 ManageBean 动态地填充这个组件 将从数据库中获取所有动物 我想知道是否可以看到用户选择的 SelectOneMenu 组合框 项目 我正在尝试使用 value
  • 有主机和无主机的入口

    理解和调试入口规则确实变得越来越困难 有人可以分享一个好的参考吗 问题是在不指定主机的情况下入口如何工作 apiVersion extensions v1beta1 kind Ingress metadata annotations ngi
  • 如何使用git拉取特定目录

    我有一个使用 git 的项目 我只想克隆或拉取特定目录 例如 myproject javascript 就像 subversion 一样 进行一些更改 提交并再次推回 这是可能的 cd 到您的存储库副本的顶部 git fetch git c
  • 比较两个数组 Javascript - 关联

    我在这里搜索了一种比较 javascript 中关联数组的质量方法 我发现的唯一合适的解决方案是PHP JS项目具有一些比较数组功能 唯一的问题是这些函数将第一个数组视为第二个数组的键 在我的情况下 至少两个数组并不总是具有相同的键数或相同
  • ng-重复完成事件

    我想调用一些针对 div 和 table 的 jQuery 函数 该表填充有ng repeat 当我打电话时 document ready 我没有结果 Also scope on viewContentLoaded myFunc 没有帮助
  • 使用 ssl 模块的 HTTPS 代理隧道

    我想手动 使用socket and ssl模块 制作一个HTTPS通过本身使用的代理请求HTTPS 我可以执行初始操作CONNECT交换就好 import ssl socket PROXY ADDR proxy addr 443 CONNE
  • XSLT:将分组 html 元素移动到节级别

    我正在尝试编写一个 XSLT 根据标头级别将 HTML 文件组织为不同的部分级别 这是我的输入 h1 HEADER 1 CONTENT h1 p Level 1 para p p Level 1 para p p Level 1 para
  • 为什么我的随机数总是相同?

    我正在使用random numberFortran 的子例程 但在程序的不同运行中 生成的数字不会改变 我应该在代码中包含什么 以便每次编译和运行程序时数字都会发生变化 随机数生成器产生伪随机数 要每次运行获得不同的数字 您需要初始化随机种
  • 将 WPF 绑定错误转换为运行时异常。不适用于已发布的已发布应用程序

    我想将数据绑定错误记录到文件中 我使用了这个接受的答案中提出的解决方案 如何将绑定错误转化为运行时异常 我也尝试过这个 http msdn microsoft com en us library system diagnostics pre
  • javax.crypto 在不同版本的 Android 操作系统中工作方式不同吗?

    我使用此代码片段来加密 解密应用程序数据库中的数据 http www androidsnippets com encryptdecrypt strings 看来 javax crypto KeyGenerator generateKey 操
  • 在 JIRA REST API 中启用 CORS

    我在 Confluence 用户宏中从 JavaScript 调用 JIRA REST API 并且面临 CORS 问题 因为 JIRA 和 Confluence 位于两个不同的域中 并且飞行前请求从浏览器失败 我已经尝试了如下所述的几种
  • 多次构造的 Eager ApplicationScoped 托管 bean

    我有一堆eager ApplicationScoped托管豆 其中一些是通过注射到其他体内的ManagedProperty注解 形成依赖树 每个依赖 bean 在构建后都会操纵其父代 然而 似乎每次注入都会创建一个新实例 从而撤销之前的操作
  • WPF:如何使自定义模式对话框闪烁?

    通常 当您打开模态对话框并尝试单击其父窗口时 模态对话框的标题栏会闪烁 在 WPF 中创建自定义 无边框 无边框窗口时 您将失去所有功能 必须自行重建 我左顾右盼 终生不知道如何让我的模态窗口闪烁 虽然还是发出嘟嘟的声音 我想我将不得不监视
  • shared_ptr 别名构造函数

    关于关注的问题shared ptr构造函数 template lt class Y gt shared ptr const shared ptr