shared_from_this 会用 boost::asio 抛出 bad_weak_ptr

2023-12-31

首先,我已阅读列出的所有相关问题。

他们说,“在使用shared_from_this之前,你必须有一个现有的shared_ptr”。据我所知,我不可能违反这个条件。我将 Foo 的实例创建为shared_ptr,并强制它始终创建为shared_ptr。然后,我将共享指针存储在一个集合中。然而,当调用shared_from_this时,我仍然得到bad_weak_ptr异常。

#pragma once

#include <memory>
#include <vector>

//--------------------------------------------------------------------
class Foo : std::enable_shared_from_this<Foo>
{
public:

    typedef std::shared_ptr<Foo> SharedPtr;

    // Ensure all instances are created as shared_ptr in order to fulfill requirements for shared_from_this
    static Foo::SharedPtr Create()
    {
        return Foo::SharedPtr(new Foo());
    };

    Foo(const Foo &) = delete;
    Foo(Foo &&) = delete;
    Foo & operator = (const Foo &) = delete;
    Foo & operator = (Foo &&) = delete;
    ~Foo() {};

    // We have to defer the start until we are fully constructed because we share_from_this()
    void Start()
    {
        DoStuff();
    }

private:

    Foo() {}

    void DoStuff()
    {
        auto self(shared_from_this());
    }
};

//--------------------------------------------------------------------
int main()
{
    std::vector<Foo::SharedPtr> foos;
    Foo::SharedPtr foo = Foo::Create();
    foos.emplace_back(foo);
    foo->Start();

    return 0;
}

你必须继承enable_shared_from_this with public说明符根据

从 std::enable_shared_from_this 公开继承为类型 T 提供了一个成员函数shared_from_this。

from http://en.cppreference.com/w/cpp/memory/enable_shared_from_this http://en.cppreference.com/w/cpp/memory/enable_shared_from_this.

所以写

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

shared_from_this 会用 boost::asio 抛出 bad_weak_ptr 的相关文章

  • C语言中的递归是如何工作的?

    我试图了解 C 中递归的工作原理 任何人都可以给我解释控制流吗 include
  • 如何动态加载包含非托管代码的原始程序集?(绕过“无法验证的代码失败策略检查”异常)

    我将举一个使用的例子系统 Data SQLite DLL http sqlite phxsoftware com 这是一个包含非托管代码的混合程序集 如果我执行这个 var assembly Assembly LoadFrom System
  • 使用 C++ 拆分“[常规设置]”格式的节字符串

    我是 C 新手 我想读取包含部分和键值对的 ini 文件 根据部分 我想读取相应键的值 首先 我想阅读方括号内的部分 请帮忙 谢谢 对于真正的 INI 文件解析 我强烈建议iniparser库 http ndevilla free fr i
  • Confuser .NET 混淆器。安全吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我目前正在开发一个应用程序 其中阻止用户反编译代码非常重要 现在 我意识到 如果由经验丰富的程序员执行 大多数 exe 都是可反编译的
  • 在 C++ 中使用表达式模板进行符号微分

    如何在 C 中使用表达式模板实现符号微分 一般来说 您需要一种表示符号的方法 即编码的表达式模板 例如3 x x 42 以及一个可以计算导数的元函数 希望您对 C 中的元编程足够熟悉 知道这意味着什么和需要什么 但可以给您一个想法 This
  • C for 循环索引:新 CPU 中的前向索引更快吗?

    在我订阅的邮件列表上 两位知识渊博的 IMO 程序员正在讨论一些优化的代码 并说了以下内容 在 5 8 年前发布的 CPU 上 向后迭代 for 循环稍微快一些 e g for int i x 1 i gt 0 i 因为比较i归零比将其与其
  • 捕获另一个进程未处理的异常

    我想知道我是否可以捕获我开始使用 Process Start 的另一个进程抛出的未处理的异常 我知道我可以用这个捕获标准错误link http social msdn microsoft com Forums en US csharpgen
  • ASP.NET MVC 路由 - 向路由添加 .html 扩展名

    我对 MVC 和路由非常陌生 我被要求修改一个应用程序以使用不同的 url 由于我没有经验 这项任务对我来说有点困难 好吧 让我们谈谈一些代码 routes MapRoute CategoryBySeName Route name prod
  • C++ 错误:从“char”到“const char*”的转换无效

    我对 C 完全陌生 我创建了这个函数 bool guessWord string compWord cout lt lt Guess a letter string userLetter cin gt gt userLetter for u
  • 只读有运行时开销吗?

    出于某种原因 我一直认为readonly字段有与其相关的开销 我认为这是 CLR 跟踪是否存在readonly字段是否已初始化 这里的开销是一些额外的内存使用量 用于跟踪状态以及分配值时的检查 也许我这么认为是因为我不知道readonly字
  • 数组与映射的性能

    我必须循环一个大数组中的元素子集 其中每个元素都指向另一个元素 问题来自于检测大图中的连接组件 我的算法如下 1 考虑第一个元素 2 将下一个元素视为前一个元素所指向的元素 3 循环直到没有发现新元素 4 考虑1 3中尚未考虑的下一个元素
  • SQL参数化查询不显示结果

    我的 DataAcess 类中有以下函数 但它没有显示任何结果 我的代码如下 public List
  • 非静态类中的静态方法和静态类中的静态方法有什么区别?

    我有两个班级A级和B级 static class ClassA static string SomeMethod return I am a Static Method class ClassB static string SomeMeth
  • 为什么我不能对普通变量进行多态?

    我是一名Java程序员 最近开始学习C 我对某事感到困惑 据我了解 在 C 中 要实现多态行为 您必须使用指针或引用 例如 考虑一个类Shape与实施的方法getArea 它有几个子类 每个子类都以不同的方式重写 getArea 然后考虑以
  • 字符串 c 的二叉树

    我正在尝试实现一个能够在 c 中保存字符串的二叉树 在让代码适用于整数之后 我尝试稍微修改它以处理字符数组 现在我似乎完全破解了代码 但不知道如何破解 任何帮助表示赞赏 include
  • 如何在 C# 中以编程方式创建柔和的颜色?

    根据所需的颜色数量均匀分布地生成它们 如果指定的计数为 8 则看起来像这样 List
  • 如何在 Winform DataGridView 中创建不同的单元格格式

    我有一个 DataGridView 我将其绑定到 DataTable DataTable 是一个全数字值 要求 DataGridView 中的每 n 行都包含文本 而不是数值 以便在视觉上为用户分隔部分 我很高兴在绑定后将此文本数据放入 D
  • 清理堆分配对象的良好实践或约定?

    我正在学习C 我有 C C ObjC 背景 相当高级的语言 在 C 或 ObjC 上 作为函数或方法的结果返回堆分配的对象是很简单的 因为对象的清理是受管理的 按照惯例 会在适当的时候销毁 但我不知道在 C 中应该如何处理这个问题 例如 s
  • 扔掉挥发物安全吗?

    大多数时候 我都是这样做的 class a public a i 100 OK delete int j Compiler happy But is it safe The following code will lead compilat
  • 如何在没有 Visual Studio 的情况下将新文件添加到 .csproj 文件

    如何添加新文件到 csproj从命令提示符 我认为没有任何工具可以响应命令行上的 add project 命令来执行此操作 但我认为您可以幸运地创建一个程序 脚本来直接操作 csproj 文件的 XML 内容 csproj 文件的结构如下所

随机推荐

  • 如何将 matlab 函数“roicolor”翻译为 scilab

    如何将 matlab 函数 roicolor 翻译为 scilab 示例代码 I imread rice png BW roicolor I 128 255 imshow I 我想你可以简单地做 BW I gt 128 I lt 255 如
  • Android NDK STL c++_shared w/LIBCXX_FORCE_REBUILD 导致 std::stringstream NOP

    tl dr 问题是为了解释为什么std stringstream 失败 以及为什么在链接到重建的 c shared 库时它会以这种方式失败 只是什么都不做 一个最小的例子 std stringstream ss ss lt lt Hello
  • Android Studio 警告:使用不兼容的插件进行注释处理

    将 Android Studio 更新到 2 3 版本后 我收到警告 警告 使用不兼容的插件进行注释处理 android apt 这可能会导致意外的行为 有什么解决办法吗 我的应用程序停止工作 您的应用程序级别 gradle 依赖项应包括
  • 使用 .htaccess 使 Apache 中的文件夹不区分大小写

    我需要使服务器上的访问目录不区分大小写 我该如何使用 htaccess 来做到这一点 您必须在 apache 中安装并启用 mod speling 模块 并在 htaccess 中将 CheckCaseOnly 指令设置为 On Check
  • 有没有办法使用 prometheus 监控 kube cron 作业

    有没有办法监控 kube cronjob 我有一个 kube cronjob 它在我的集群上每 10 分钟运行一次 有没有一种方法可以在每次我的 cronjob 由于某些错误而失败时收集指标 或者在我的 cronjob 在一定时间后尚未完成
  • Google Apps 脚本 - ContactsApp - 目录搜索

    在 Google 电子表格中 我试图验证用户从域目录中输入的电子邮件地址 目的是改变所有权 合作者权利 但这是更进一步的 我已经使用了 ContactsApp getContacts 它已按预期迭代 显示了我的联系人中的联系人列表 但是 不
  • 詹金斯没有发现质量门失败

    如果代码没有 90 的测试覆盖率 我希望 Jenkins 构建失败 为此 我安装了Quality Gates插件 它应该检查 SonarQube 分析 我有以下配置Jenkins under Quality Gates Name Sonar
  • 如何在 Perl 中使用“lock_hash_recurse”?

    在继续讨论中here https stackoverflow com questions 3725675 how to improve the usage of lock keys in perl 3725836 3725836 我遇到了一
  • 访问气流中的“ds”变量

    我能够访问 python 代码中的宏 如下所示 partition dt macros ds add ds 1 但我不知道如何掌握ds变量本身似乎只能在模板中访问 有什么指点吗 我假设您想调用内置 AirFlow ds 的默认变量之一 执行
  • 如何获取键盘的高度,包括 swift 4 中的建议栏

    I used NotificationCenter default addObserver self selector selector keyboardWillShow name UIKeyboardWillShow object nil
  • 信号处理:FFT 重叠处理资源

    是否有关于重叠处理的任何好的 如果可能是科学的 可用资源 网络或书籍 我对分析信号时使用重叠处理和窗口的效果不太感兴趣 因为要求不同 更多的是关于以下实时情况 我目前正在处理音频信号 将信号分成更小的部分 创建重叠窗口 对加窗块进行 FFT
  • 会话 Bean 丢失?

    对 viewBean 的第一个 非回发 请求 sessionBean 中的 someValue 属性为 null 现在 在回发请求中 我将用户输入设置为 someValue 问题是 someValue 在任何 非回发 请求中始终为 null
  • 代码点火器图像更新

    我遇到了图像上传器的问题 我已经创建了图像上传器 它工作正常 但我还需要编辑它们 当我添加需要的图像时 数据库列会正确更新 但如果不更改图像并保持原样 我会收到错误 Column image 不能为空 这是更新部分的代码 else if t
  • 离开页面之前的 JavaScript

    我想在用户离开页面之前进行确认 如果他说 确定 那么它将重定向到新页面或取消离开 我尝试用 onunload 来实现 h1 h1
  • 错误:对象文件为空 .git/objects/../.. 为空 -- 致命:松散对象...已损坏

    这是过去三周内第五次发生这种情况 我真的很困惑为什么这种情况不断发生 这是我执行 git status 时收到的确切消息 error object file git objects 48 088f00d90b0d27de65336bb9ed
  • 如何以编程方式更改 UITableView 的披露指示器的颜色? [复制]

    这个问题在这里已经有答案了 我知道使用UIImageView我们可以设置披露指示器配件 但我只想更改披露指示器颜色而不使用UIImageView 可能还是不可能 如果可以的话怎么办 添加您自己的披露指标 cell accessoryView
  • Conda 激活/停用环境破坏路径

    我发现当我创建 Conda 环境时source activate environment然后停用该环境source deactivate environment 我的本机 bash 命令不再起作用 我附上了 ls 在启用环境之前工作的图像
  • 线程 - 如何获取父 ID/名称?

    我正在寻找从子线程获取父 ID 或名称的方法 例如 我将主线程作为MainThread 在这个线程中我创建了一些新线程 然后我用threading enumerate 要获取对所有正在运行的线程的引用 请选择一个子线程并以某种方式获取主线程
  • Google Play 管理中心 Play 应用程序签名 - Android 应用程序包未签名

    我正在尝试创建一个游戏商店版本 我已严格按照指南创建上传密钥和密钥库 https developer android com studio publish app signing generate key https developer a
  • shared_from_this 会用 boost::asio 抛出 bad_weak_ptr

    首先 我已阅读列出的所有相关问题 他们说 在使用shared from this之前 你必须有一个现有的shared ptr 据我所知 我不可能违反这个条件 我将 Foo 的实例创建为shared ptr 并强制它始终创建为shared p