繁体   English   中英

CRTP基类继承std :: enable_shared_from_this,并抛出std :: bad_weak_ptr。 我需要安静

[英]CRTP base class inheriting std::enable_shared_from_this, throwing std::bad_weak_ptr. I need quidance

当我尝试在基类shared_handler中的share_from_this()返回DerivedT共享指针时,我抛出了一个异常: std::bad_weak_ptr

在调用shared_from_this()之前,我曾尝试在构造过程中在基类中存储内部共享指针,但是却遇到了更加模棱两可的错误。

template<class DerivedT>
struct shared_handler : std::enable_shared_from_this<DerivedT>
{
  void some_method(arbitrary input) {
    do_something(shared_from_this());
  }
};

struct my_handler : shared_handler<my_handler>
{
  my_handler()
  {
    some_method("hello");
  }
};
template<class DerivedT>
struct shared_handler : std::enable_shared_from_this<shared_handler<DerivedT>>
{
  void some_method(arbitrary input) {
    do_something(shared_from_this());
  }
};

来自cppreference

只允许在以前共享的对象(即std::shared_ptr<T>管理的对象)上调用shared_from_this 否则,将抛出std::bad_weak_ptr (由shared_ptr构造函数从默认构造的weak_this )。

在C ++ 17之前,它是未定义的行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM