考虑以下代码:
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)(从C ++ 17开始)抛出std :: bad_weak_ptr(由默认构造的weak_this的shared_ptr构造函数抛出)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句