调用unique_ptr子类继承的模板构造函数

2023-12-08

这不是关于模板构造函数甚至调用继承的模板构造函数的问题的重复。

它具体是关于在 unique_ptr<...> 模板的类实例(?) 的子类中调用继承的构造函数。

问题

为了使代码更容易理解,我使用using在这个例子中:

using B = std::unique_ptr<int *, decltype(&::free)>;

class int_ptr : public B {
    int_ptr(int *b) : B(b, &::free) { };
};

但编译失败:

In constructor 'int_ptr::int_ptr(int*)':
error: no matching function for call to 
    'std::unique_ptr<int*, void (*)(void*) throw ()>::unique_ptr(int*&, void (*)(void*) throw ())'

int_ptr(int *b) : B(b, &::free) { };
                              ^

我能想到的缺乏功能匹配的唯一可能原因是存在throw ()但我不知道该怎么办,或者这是否是一个问题。可能unique_ptr是无投掷。

否则,不匹配的函数正是我期望匹配的函数。


原因

我不想每次声明 unique_ptr 的实例时都指定析构函数。这个答案中有一个很好的选择https://stackoverflow.com/a/16615285/2332068,但我有兴趣知道我的尝试出了什么问题。

当然,现实生活中这并不是int*我正试图融入unique_ptr,但有些不透明(但不是void*) 指针。

我的目的是在作用域退出时正确释放 C API 中的所有这些指针。

也许我可以用析构函数将这些指针限制到一个类/结构中,但我看不出它会节省多少。

Result

根据@RSahu 的提示,我想出了这个,unique_dptr以避免需要不断指定析构函数,但作为覆盖 std 命名空间中的模板删除函数的替代方法:

void free_int(int* p) {
  delete p;
}

template<typename T, void (*D)(T*)>
class unique_dptr : public std::unique_ptr<T, decltype(D)> {
    public: unique_dptr(T* t) : std::unique_ptr<T, decltype(D)>(t, D) { };
};

using int_ptr = unique_dptr<int, ::free_int>;
int_ptr i(new int(2));

std::unique<int>是为了成为智能指针ints,即替代int*.

当你使用std::unique<int*>,指针需要是int**.

代替

using B = std::unique_ptr<int *, decltype(&::free)>;

use

using B = std::unique_ptr<int, decltype(&::free)>;

工作代码(谢谢,@CompuChip):http://ideone.com/ul29vr.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

调用unique_ptr子类继承的模板构造函数 的相关文章

  • 如何在没有 Control.Invoke() 的情况下从后台线程修改控件属性

    最近 我们遇到了一些旧版 WinForms 应用程序 我们需要更新一些新功能 在专家测试该应用程序时 发现一些旧功能被破坏 无效的跨线程操作 现在 在您认为我是新手之前 我确实有一些 Windows 窗体应用程序的经验 我不是专家 但我认为
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • 使用 Google Analytics API 在 C# 中显示信息

    我一整天都在寻找一个好的解决方案 但谷歌发展得太快了 我找不到有效的解决方案 我想做的是 我有一个 Web 应用程序 它有一个管理部分 用户需要登录才能查看信息 在本节中 我想显示来自 GA 的一些数据 例如某些特定网址的综合浏览量 因为我
  • c 中的错误:声明隐藏了全局范围内的变量

    当我尝试编译以下代码时 我收到此错误消息 错误 声明隐藏了全局范围内的变量 无效迭代器 节点 根 我不明白我到底在哪里隐藏或隐藏了之前声明的全局变量 我怎样才能解决这个问题 typedef node typedef struct node
  • c# Asp.NET MVC 使用FileStreamResult下载excel文件

    我需要构建一个方法 它将接收模型 从中构建excel 构建和接收部分完成没有问题 然后使用内存流导出 让用户下载它 不将其保存在服务器上 我是 ASP NET 和 MVC 的新手 所以我找到了指南并将其构建为教程项目 public File
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • 编译的表达式树会泄漏吗?

    根据我的理解 JIT 代码在程序运行时永远不会从内存中释放 这是否意味着重复调用 Compile 表达式树上会泄漏内存吗 这意味着仅在静态构造函数中编译表达式树或以其他方式缓存它们 这可能不那么简单 正确的 他们可能是GCed Lambda
  • 是否有比 lex/flex 更好(更现代)的工具来生成 C++ 分词器?

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

    在 C 中初始化变量有多种方法 int z 3 与 int 相同z 3 Is int z z 3 same as int z z 3 您可以使用 int z z 3 Or just int z 3 Or int z 3 Or int z i
  • 像“1$”这样的位置参数如何与 printf() 一起使用?

    By man I find printf d width num and printf 2 1 d width num 是等价的 但在我看来 第二种风格应该与以下相同 printf d num width 然而通过测试似乎man是对的 为什
  • 网络参考共享类

    我用 Java 编写了一些 SOAP Web 服务 在 JBoss 5 1 上运行 其中两个共享一个类 AddressTO Web 服务在我的 ApplycationServer 上正确部署 一切都很顺利 直到我尝试在我的 C 客户端中使用
  • 在 URL 中发送之前对特殊字符进行百分比编码

    我需要传递特殊字符 如 等 Facebook Twitter 和此类社交网站的 URL 为此 我将这些字符替换为 URL 转义码 return valToEncode Replace 21 Replace 23 Replace 24 Rep
  • 如何构建印度尼西亚电话号码正则表达式

    这些是一些印度尼西亚的电话号码 08xxxxxxxxx 至少包含 11 个字符长度 08xxxxxxxxxxx 始终以 08 开头 我发现这个很有用 Regex regex new Regex 08 0 9 0 9 0 9 0 9 0 9
  • 在 ASP.NET 中将事件冒泡为父级

    我已经说过 ASP NET 中的层次结构 page user control 1 user control 2 control 3 我想要做的是 当控件 3 它可以是任何类型的控件 我一般都想这样做 让用户用它做一些触发回发的事情时 它会向
  • Bing 地图运行时错误 Windows 8.1

    当我运行带有 Bing Map 集成的 Windows 8 1 应用程序时 出现以下错误 Windows UI Xaml Markup XamlParseException 类型的异常 发生在 DistanceApp exe 中 但未在用户
  • 窗体最大化时自动缩放子控件

    有没有办法在最大化屏幕或更改分辨率时使 Windows 窗体上的所有内容自动缩放 我发现手动缩放它是正确的 但是当切换分辨率时我每次都必须更改它 this AutoScaleDimensions new System Drawing Siz
  • 如何在 C# 中播放在线资源中的 .mp3 文件?

    我的问题与此非常相似question https stackoverflow com questions 7556672 mp3 play from stream on c sharp 我有音乐网址 网址如http site com aud
  • C++ 成员函数中的“if (!this)”有多糟糕?

    如果我遇到旧代码if this return 在应用程序中 这种风险有多严重 它是一个危险的定时炸弹 需要立即在应用程序范围内进行搜索和销毁工作 还是更像是一种可以悄悄留在原处的代码气味 我不打算writing当然 执行此操作的代码 相反
  • 如何将字符串“07:35”(HH:MM) 转换为 TimeSpan

    我想知道是否有办法将 24 小时时间格式的字符串转换为 TimeSpan 现在我有一种 旧时尚风格 string stringTime 07 35 string values stringTime Split TimeSpan ts new
  • 为什么 strtok 会导致分段错误?

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

随机推荐

  • 为什么验证不适用于 DTO 类型的对象,而仅适用于实体

    我在类型对象上设置了注释dto 与 over 类型的对象相同Entity 该注释适用于entities 但它不适用于类型的对象dto 我在 工作春季启动 应用程序属性 validate packageid size The field PA
  • 如何解决 nginx 上的 404 错误?

    我有一个 Angular 4 SPA 应用程序 我正在使用 docker 进行生产 到目前为止看起来还不错 通过终端我去 dist文件夹 然后我让 docker 指向该文件夹的内容dist使用以下命令 docker run d p 9090
  • 应用程序上下文变量的值因应用程序错误而丢失

    我注意到 当我的应用程序遇到错误时 应用程序上下文变量的值也会重新初始化为其原始值 而不是更新后的值 根据我的理解 发生这种情况是因为应用程序被重新创建了 当应用程序发生错误时 如何保存和恢复应用程序上下文变量的值 如果您能更详细地解释我的
  • D3:如何通过更改数据文件源来动态刷新图表?

    如何通过更改文件 d3 访问来按需更新数据 例如 只需单击一下 它就会从新的数据文件中读取数据 并像 AJAX 一样向图表添加更多节点 我使用 d3 tsv 读取 data tsv 这是许多相同格式的文件之一 我做了一个简单的图表来说明我的
  • Matlab中无放回加权采样

    我有人口p向量中的索引和相应权重w 我想要得到k该人群的样本无需更换其中选择与随机权重成比例 我知道randsample可以用于通过替换进行选择 J randsample p k true w 但是当我用参数调用它时false代替true
  • 优化 JavaFX 中的内存泄漏

    我写了一段代码 让字母在我写的时候出现并飞翔 问题是它消耗大量内存 我已经对其进行了一些优化 分享path对象并在侦听器中更新其参数 每次打印新字母时调用 gc 但它仍然使用大量内存 那么关于如何减少其内存利用率有什么想法吗 提前致谢 pa
  • Web浏览器控制文件下载对话框绕过

    实际上我想使用 Webbrowser Control 从网站下载文件 但由于文件下载对话框 我无法自动执行下载过程 对于绕过它 我想使用 Web 客户端 并且需要将所有会话和 Cookie 从 Web 浏览器控件传输到 Web 客户端 或者
  • 获取“队列对象只能通过继承在进程之间共享”,但我没有使用队列

    我正在尝试使用 ProcessPoolExecutor 但收到错误 队列对象只能通过继承在进程之间共享 但我没有使用队列 至少没有明确使用 我找不到任何东西可以解释我做错了什么 这是一些演示该问题的代码 不是我的实际代码 from conc
  • 无法使用 Maven 执行 Junit5 测试 [重复]

    这个问题在这里已经有答案了 Maven执行 mvn clean test 我正在尝试使用junit5对于我的一个 Maven 项目 但无法在test阶段使用
  • 不规则间隔的热图

    我想根据下面的矩阵和边界创建一个热图 然后绘制数据 x1 x2 以查看属于各个类别的点 我能做的最好的事情就是使用seaborn 但是由于两个轴上的类间隔不均匀 因此很难读取两个轴上对应于点的值 有没有办法 使用seaborn或任何其他库
  • 从两个或多个现有表创建新表 (MySQL)

    问题 是否可以在 mySQL 中从两个或多个现有表创建一个表 Details 我可以创建一个像这样的表吗 CREATE TABLE IF NOT EXISTS USERNAME AGE INT NOT NULL CREATE TABLE I
  • 在 C# 中编译邮件的 HTML 正文

    我使用以下代码供用户向我的电子邮件发送报价 using System Net Mail MailMessage mail new MailMessage mail From new MailAddress Email Text mail T
  • 在无头模式下使用 Firefox 68.9.0esr 以及 GeckoDriver Selenium 和 Python 时出现 504 网关超时错误

    我用硒制作了一个容器图像 我用了一个ubi image来自 RedHat 作为基础镜像 我安装了以下版本的 geckodriver 和 Mozilla Firefox 壁虎驱动程序 0 26 0 e9783a644016 2019 10 1
  • 在 Windows 8.1 中安装 virtualenvwrapper-powershell,导入模块失败

    我正在尝试遵循指南here 我被困在Import Module virtualenvwrapper PowerShell 不断给我错误 import module 指定的模块 virtualenvwrapper 不是 已加载 因为在任何模块
  • 未找到 AWS ec2 winreg

    我正在尝试从亚马逊 EC2 大型实例运行 python 应用程序 然而 它在 scipy 中抱怨 因为它找不到名为 winreg 的东西 我不知道如何重新配置 它 所以它不再是问题 python2 app py Running on htt
  • Chrome 扩展如何在页面底部添加浮动栏?

    我正在创建一个需要注入浮动元素的 chrome 扩展 即position fixed 在页面底部 我的要求是 我需要从内容脚本访问其中的元素 这是因为我将事件附加到按钮 以便用户可以从浮动栏在当前选项卡上执行操作 我希望它的样式保持独立于当
  • 显示斯坦福 NER 置信度分数

    我使用斯坦福 NER CRFClassifier 从新闻文章中提取命名实体 为了实现主动学习 我想知道每个标记实体的类的置信度分数是多少 显示示例 地点 0 20 人员 0 10 组织 0 60 其他 0 10 这是我从文本中提取命名实体的
  • 启动 ASP.NET 表单身份验证

    我开始学习 ASP NET 表单身份验证 并且正在寻找一篇好文章来帮助我入门 我之前听说 ASP NET 表单身份验证使用大量数据库表 前面带有aspnet 但是我发现的任何例子都没有显示这一点 例如我认为有一个aspnet users t
  • 创建数据框时如何解决 scala.MatchError

    我有一个具有复杂结构行的文本文件 我正在使用客户转换器 它将给定的字符串 行 转换为 Pojo 类 countryInfo 转换后 我正在构建 DF POJO 类有一个字段 它是自定义类型列表 GlobalizedPlayTimeWindo
  • 调用unique_ptr子类继承的模板构造函数

    这不是关于模板构造函数甚至调用继承的模板构造函数的问题的重复 它具体是关于在 unique ptr 模板的类实例 的子类中调用继承的构造函数 问题 为了使代码更容易理解 我使用using在这个例子中 using B std unique p