当我尝试在基类share_from_this()
中shared_handler
返回一个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");
}
};
答案 0 :(得分:1)
template<class DerivedT>
struct shared_handler : std::enable_shared_from_this<shared_handler<DerivedT>>
{
void some_method(arbitrary input) {
do_something(shared_from_this());
}
};
只允许在先前共享的对象上调用
shared_from_this
,即在std::shared_ptr<T>
管理的对象上调用。否则,将抛出std::bad_weak_ptr
(由shared_ptr
构造函数从默认构造的weak_this
中抛出)。
直到C ++ 17,它都是未定义的行为。