std::bind 创建的函子住在哪里?

2023-11-22

函数指针可以指向自由函数、函数对象、成员函数调用的包装器等任何内容。

但是, std::bind 创建的函子可以有状态,也可以有自定义创建的函子。该状态分配在哪里,谁在删除它?

考虑下面的例子——当向量被删除时,状态(数字10)会被删除吗?谁知道在函子上调用删除器,而在函数指针上不调用删除器?

#include <iostream>
#include <functional>
#include <vector>
using namespace std;
using namespace std::placeholders;
class Bar
{
    public:
    void bar(int x, int y) { cout << "bar" << endl; }
};
void foo(int baz){ cout << "foo" << endl; }
int main() {
    typedef std::function<void(int)> Func;

    std::vector<Func> funcs;
    funcs.push_back(&foo); // foo does not have to be deleted
    Bar b;
    // the on-the-fly functor created by bind has to be deleted
    funcs.push_back(std::bind(&Bar::bar, &b, 10, _1)); 

    // bind creates a copy of 10. 
    // That copy does not go into the vector, because it's a vector of pointers.
    // Where does it reside? Who deletes it after funcs is destroyed?

    return 0;
}

std::bind按值返回一个对象(对象的确切类型是标准库的实现细节)。该对象存储所有必要的状态,其析构函数执行所有必要的清理。

请注意,您的向量不存储指针 - 它存储std::function对象。 Astd::functionobject 内部存储创建它的对象(函数指针或由std::bind在你的情况下),并且它的析构函数正确地销毁了存储的对象。销毁函数指针不会执行任何操作。销毁类类型的对象会调用其析构函数。

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

std::bind 创建的函子住在哪里? 的相关文章

  • 进程何时获得 SIGABRT(信号 6)?

    C 中进程获得 SIGABRT 的场景有哪些 该信号是否始终来自进程内部 或者该信号可以从一个进程发送到另一个进程吗 有没有办法识别哪个进程正在发送该信号 abort 向调用进程发送SIGABRT信号 就是这样abort 基本上有效 abo
  • OpenCv读/写视频色差

    我试图简单地使用 openCV 打开视频 处理帧并将处理后的帧写入新的视频文件 我的问题是 即使我根本不处理帧 只是打开视频 使用 VideoCapture 读取帧并使用 VideoWriter 将它们写入新文件 输出文件看起来比输入更 绿
  • 我的线程图像生成应用程序如何将其数据传输到 GUI?

    Mandelbrot 生成器的缓慢多精度实现 线程化 使用 POSIX 线程 Gtk 图形用户界面 我有点失落了 这是我第一次尝试编写线程程序 我实际上并没有尝试转换它的单线程版本 只是尝试实现基本框架 到目前为止它是如何工作的简要描述 M
  • 使用具有现有访问令牌的 Google API .NET 客户端

    用例如下 移动应用程序正在通过 Google 对用户进行身份验证 并且在某些时候 我们需要将用户的视频发布到他的 YouTube 帐户 出于实际原因 实际发布应该由后端完成 已经存储在那里的大文件 由于用户已经通过应用程序的身份验证 因此应
  • 为什么大多数 C 开发人员使用 Define 而不是 const? [复制]

    这个问题在这里已经有答案了 在许多程序中 define与常量具有相同的用途 例如 define FIELD WIDTH 10 const int fieldWidth 10 我通常认为第一种形式优于另一种形式 它依赖于预处理器来处理基本上是
  • C# 中的接口继承

    我试图解决我在编写应用程序时遇到的相当大的 对我来说 问题 请看这个 为了简单起见 我将尝试缩短代码 我有一个名为的根接口IRepository
  • POCO HTTPSClientSession 发送请求时遇到问题 - 证书验证失败

    我正在尝试使用 POCO 库编写一个向服务器发出 HTTPS 请求的程序 出于测试目的 我正在连接到具有自签名证书的服务器 并且我希望允许客户端进行连接 为了允许这种情况发生 我尝试安装InvalidCertificateHandler这是
  • 如何配置 WebService 返回 ArrayList 而不是 Array?

    我有一个在 jax ws 上实现的 java Web 服务 此 Web 服务返回用户的通用列表 它运行得很好 Stateless name AdminToolSessionEJB RemoteBinding jndiBinding Admi
  • ASP MVC:服务应该返回 IQueryable 的吗?

    你怎么认为 你的 DAO 应该返回一个 IQueryable 以便在你的控制器中使用它吗 不 您的控制器根本不应该处理任何复杂的逻辑 保持苗条身材 模型 而不是 DAO 应该将控制器返回给视图所需的所有内容 我认为在控制器类中看到查询 甚至
  • 当前的 c++ 工作草案与当前标准有何不同

    通过搜索该标准的 PDF 版本 我最终找到了这个链接C 标准措辞草案 http www open std org jtc1 sc22 wg21 docs papers 2012 n3376 pdf从 2011 年开始 我意识到我可以购买最终
  • 如何从网站下载 .EXE 文件?

    我正在编写一个应用程序 需要从网站下载 exe 文件 我正在使用 Visual Studio Express 2008 我正在使用以下代码 private void button1 Click object sender EventArgs
  • C 语言中 =+(等于加)是什么意思?

    我碰到 与标准相反 今天在一些 C 代码中 我不太确定这里发生了什么 我在文档中也找不到它 In ancientC 版本 相当于 它的残余物与最早的恐龙骨头一起被发现 例如 B 引入了广义赋值运算符 使用x y to add y to x
  • 基于xsd模式生成xml(使用.NET)

    我想根据我的 xsd 架构 cap xsd 生成 xml 文件 我找到了这篇文章并按照说明进行操作 使用 XSD 文件生成 XML 文件 https stackoverflow com questions 6530424 generatin
  • 当我“绘制”线条时,如何将点平均分配到 LineRenderer 的宽度曲线?

    我正在使用线条渲染器创建一个 绘图 应用程序 现在我尝试使用线条渲染器上的宽度曲线启用笔压 问题在于 AnimationCurve 的 时间 值 水平轴 从 0 标准化为 1 因此我不能在每次添加位置时都在其末尾添加一个值 除非有一个我不知
  • 如何一步步遍历目录树?

    我发现了很多关于遍历目录树的示例 但我需要一些不同的东西 我需要一个带有某种方法的类 每次调用都会从目录返回一个文件 并逐渐遍历目录树 请问我该怎么做 我正在使用函数 FindFirstFile FindNextFile 和 FindClo
  • System.Runtime.InteropServices.COMException(0x80040154):[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我在 C 项目中遇到异常 System Runtime InteropServices COMException 0x80040154 检
  • 在类的所有方法之前运行一个方法

    在 C 3 或 4 中可以做到这一点吗 也许有一些反思 class Magic RunBeforeAll public void BaseMethod runs BaseMethod before being executed public
  • 结构体指针的动态数组

    我必须使用以下代码块来完成学校作业 严格不进行任何修改 typedef struct char firstName char lastName int id float mark pStudentRecord pStudentRecord
  • 使用 C# 从 DateTime 获取日期

    愚蠢的问题 给定日期时间中的日期 我知道它是星期二 例如我如何知道它的 tue 2 和 mon 1 等 Thanks 您正在寻找星期几 http msdn microsoft com en us library system datetim
  • 使用 CSharpCodeProvider 类编译 C# 7.3 的 C# 编译器版本是什么?

    我想使用 Microsoft CSharp CSharpCodeProvider 类来编译 C 7 3 代码 编译器版本在 IDictionary 中指定 在创建新的 CSharpCodeProvider 时将其作为输入 例如 Compil

随机推荐

  • 如何在触摸屏幕(搜索栏)时隐藏键盘

    当我单击 搜索 或单击 取消 时 键盘会隐藏 但我还希望当我单击屏幕上的某个位置时键盘会隐藏 我找到了几个关于文本字段的教程 但我们正在使用搜索栏 有人可以告诉我该怎么做吗 Thanks Try This 在你的 h 文件中添加 UISea
  • 单击选择框上的触发器在 jQuery 中不起作用

    如何使用触发器打开下拉列表 这是不起作用的代码 select trigger click 请注意 mousedown 和 mouseup 也不起作用 select children option each function if this
  • 禁用 firefox 另存为dialog-selenium

    我正在使用 selenium 进行网页抓取 每当我尝试下载文件时 即使我申请 也会弹出 Firefox 下载 另存为文件的情况profile set preference browser helperApps neverAsk saveTo
  • 如何在Android中启用USB调试?

    如何在 Nexus 7 第一代 中启用 USB 调试 编辑 接受的答案也适用于隐藏开发人员选项的其他 Android 设备 在 设置 的 开发者选项 区域中打开 USB 调试 如果您没有看到 开发人员选项 请进入 设置 中的 关于设备 然后
  • Laravel 5.8 全局设置区域设置

    我有一条路线 Route get setlocale locale function locale App setLocale locale return back gt name setlocale 当我去 example com set
  • CXF 客户端代理线程安全吗?

    我正在使用 CXF 生成 SOAP 客户端类 在里面CXF 文档 他们写 JAX WS 客户端代理线程安全吗 JAX WS 官方答案 不 根据 JAX WS 规范 客户端代理不是线程安全的 要编写可移植代码 您应该将它们视为非线程安全并同步
  • 嵌套对象的远程 ViewModel 验证不起作用

    我有一个类用户 如下所示 public class User public int UserId get set Required ErrorMessage A username is required StringLength 20 Er
  • python中按多个条件排序

    我是编程新手 现在我正在用 python 编写排行榜 我想按第一积分对我的联赛进行排序 如果有两支球队积分相同 我想按净胜球对它们进行排序 如果它们有相同的净胜球 我想按名称排序 第一个条件非常简单 并且按以下方式工作 table sort
  • 使用 jQuery 查找下载链接后面的文件大小

    我想知道是否有一种方法可以使用 jQuery 来找出我链接到网页的 PDF 的文件大小 我想让鼠标悬停在下载链接上时 会弹出一个模式框 显示 PDF 的文件大小 我可以做第二位 我唯一想知道的是如何找出文件大小 我不知道 jQuery 是否
  • AWS beanstalk中的worker-tier和web-tier有什么区别

    在阅读文档时 我开始了解 AWS 中的这两层环境 但找不到它们之间的任何比较 文档中的建议是 应该为长时间运行的任务选择工作环境 以提高 Web 层的响应能力 我有几个问题来澄清我的疑惑 两层有何不同 关于执行不同的操作 每个操作中可用的服
  • 如何在 Spring 中自动装配泛型类型 的 Bean?

    我有一颗豆子Item
  • 我可以使用Spring5的WebClient返回的Flux的block()方法吗?

    我创建了 Spring Boot 2 0 演示应用程序 其中包含两个使用 WebClient 进行通信的应用程序 当我从 WebClient 的响应中使用 Flux 的 block 方法时 他们经常停止通信 这让我很痛苦 由于某些原因 我想
  • C++ 引用与返回值

    我理解引用的原则是避免复制大型结构 但是如果您正在编写的函数本身创建了大型结构怎么办 与将目标对象作为引用传递并从函数内部填充相比 在本地创建变量然后返回它是否效率较低 或者更有可能耗尽内存 我似乎无法很好地表达 所以一个具体的例子 假设一
  • JS 对象键带引号还是不带引号? [复制]

    这个问题在这里已经有答案了 可能的重复 带引号和不带引号的对象键有什么区别 感兴趣吗 什么是正确的方法 是否将对象键写在引号中 那是 var obj name Jhon or var obj name Jhon 例如 从 php 代码ech
  • Git 中的 HEAD 和 ORIG_HEAD

    这些符号代表什么以及它们的含义是什么 我在官方文档中找不到任何解释 HEAD是 直接或间接 即符号 对当前提交的引用 这是您已在工作目录中签入的提交 除非您进行了一些更改或同等更改 并且是在 git commit 之上创建新提交的提交 通常
  • 无法在具有 @objc 属性的协议中使用自定义类?

    我正在尝试创建一个用于 JSON 加载委托的协议 JSONLoaderDelegate 我的另一堂课叫做JSONLoader 应该将事件分派给它的委托 实现JSONLoaderDelegate协议 如 self delegate jsonL
  • Laravel 8 - 找不到驱动程序:Illuminate\Database\QueryException 无法找到驱动程序(SQL:从 `list` 中选择 *)

    我已经在我的 Linux Mint 20 上安装了 Laravel 8 作为我的个人实验 所以我对 Laravel 的新版本很陌生 我搜索了许多来源如何使用 CRUD 方法显示表 以便该表显示在网络中 其中包含来自 MySQL 数据库的数据
  • Spring data JPA:在结果元组中找不到别名!执行自定义查询时出错

    我正在尝试使用 mysql 数据库执行自定义查询 Queryspring data jpa 的注解 该表是 Field Type Null Key Default Extra id decimal 10 0 NO PRI NULL firs
  • iOS中如何实现弹出对话框?

    计算后 我想显示一个弹出窗口或警报框 向用户传达消息 有谁知道我在哪里可以找到有关此的更多信息 Yup a UIAlertView可能就是您正在寻找的 这是一个例子 UIAlertView alert UIAlertView alloc i
  • std::bind 创建的函子住在哪里?

    函数指针可以指向自由函数 函数对象 成员函数调用的包装器等任何内容 但是 std bind 创建的函子可以有状态 也可以有自定义创建的函子 该状态分配在哪里 谁在删除它 考虑下面的例子 当向量被删除时 状态 数字10 会被删除吗 谁知道在函