为什么调用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。

llllllllll

因为a不是共享指针所拥有。来自cppreference

只允许在以前共享的对象上调用shared_from_this,即在std :: shared_ptr管理的对象上。否则,该行为是不确定的(直到C ++ 17)(从C ++ 17开始)抛出std :: bad_weak_ptr(由默认构造的weak_this的shared_ptr构造函数抛出)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我可以直接调用 std::terminate 吗?

为什么在抛出我的析构函数时没有调用 std::terminate

防止线程在处理异常后在分离时调用std :: terminate()

当抛出前一个异常时从(创建/复制/移动)构造函数中抛出异常时,为什么不调用 std::terminate()?

DLL的std :: set_terminate吗?

std::terminate() 是否触发堆栈展开?

为什么boost示例再次调用`shared_from_this()`而不是使用闭包变量

在 asyncio 子进程上调用 .terminate() 会引发 ProcessLookupError

throw()函数是否应始终在异常上展开堆栈并允许捕获异常或必须调用std :: terminate?

可见性受限的`noexcept`函数中的`std :: terminate`调用-GCC vs Clang Codegen

从类成员初始化程序引发的异常应该调用std :: terminate()吗?

从noexcept函数参数的构造函数引发的异常是否会立即导致对std :: terminate()的调用?

boto3中的terminate_instances()和terminate()有什么区别?

std :: enable_shared_from_this:是否可以在析构函数中调用shared_from_this()?

编写死亡测试以验证std :: set_terminate行为

QProcess :: kill()和QProcess :: terminate()有什么区别?

zend Framework 2中的“ may_terminate”是什么?

进程的KILL,SUSPEND和TERMINATE有什么区别

可能在调用`XCUIApplication()。terminate()`之后阻止XCode调用调试器。

调用join时如何解决`terminate被调用而没有活动异常'

在某些情况下,使用std :: set_terminate无法捕获C ++纯虚函数调用吗?

为什么cd会调用函数':'?

为什么Workbook.Close会触发UserForm_Terminate?-VBA

检查调用shared_from_this()是否有效的方法?

为什么在onAreaTouched调用之后,会调用onSceneTouchEvent()事件?

为什么float和int的std :: pow会调用此重载?

当对象绑定到成员函数时,为什么std :: function会调用析构函数?

如何将Std :: set_terminate与SetUnhandledExceptionFilter一起使用?

Python 多处理中的 Process.terminate() 和 Process.kill() 有什么区别?