c++ - 为什么调用 shared_from_this 调用 std::terminate
问题描述
考虑这段代码:
class A : public std::enable_shared_from_this<A>
{
public:
std::shared_ptr<A> f()
{
return shared_from_this();
}
};
int main()
{
A a;
std::shared_ptr<A> ptr = a.f();
}
此代码在 Visual Studio 2017 中终止。我想我在这里做错了什么。谁能帮我这个?我想要一个由 shared_from_this() 创建的 shared_ptr。
解决方案
因为a
不是共享指针所拥有的。从cppreference:
只允许在先前共享的对象上调用 shared_from_this,即在由 std::shared_ptr 管理的对象上。否则行为未定义(C++17 前)std::bad_weak_ptr 被抛出(由默认构造的weak_this 中的shared_ptr 构造函数)(C++17 起)。
推荐阅读
- android - 如何避免从第二个列表中删除项目会影响 kotlin 中的原始列表
- python - 如何为客户最近遇到的分类模型分配更高的权重?
- python - 在 PySpark 中显示物理计划
- java - 如何在 kafka 主题中发布之前删除消息有效负载中的空字段
- javascript - How to make a moving/sliding element in Three.js?
- python - Flask CLI:如何打印 ImportError 的回溯或库名称
- excel - excel 正弦函数如何处理错误输入?
- arrays - 数组值被数组中添加的最后一个值替换
- itfoxtec-identity-saml2 - 使用 .Net Core 5 MVC 为多个 IDP 实施 SAML2
- node.js - 如何使用主键和外键代替带有 Sequelize 的桥表来建模 M:N 关系?