![](/img/trans.png)
[英]std::bad_weak_ptr after inheriting from class that inherits from std::enable_shared_from_this
[英]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.