最近,我遇到了std::enable_shared_from_this<T>
模板,该模板与Boost版本相同
所以它描述了以下示例代码:
class Y: public enable_shared_from_this<Y>
{
public:
shared_ptr<Y> f()
{
return shared_from_this();
}
}
int main()
{
shared_ptr<Y> p(new Y);
shared_ptr<Y> q = p->f();
assert(p == q);
assert(!(p < q || q < p)); // p and q must share ownership
}
通过f()?
创建shared_ptr的原因是什么
问题与shared_ptr<Y> p(new Y);
有什么关系?
答案 0 :(得分:3)
shared_ptr p(新Y)有什么问题;?
它没有任何问题,只是问题你可能没有在类Y
的成员中,有时你想要一个成员将std::shared_ptr
返回给自己。 std::shared_ptr<Y>( this )
显然是错误的创建方式。
我想知道这样的例子是否可以让事情变得更清晰,并且仍然足够简单:
std::shared_ptr<Y> Y::getObject()
{
return some_condition ? shared_from_this() : std::make_shared<Y>( somedata );
}
答案 1 :(得分:3)
shared_from_this
的要点是,当您 已经有权访问<{1}}时,您可以获得shared_ptr
。它在你的例子中毫无意义,因为你的例子太简单了。想象一下,某些功能只能获得Y*
或Y&
,并且需要与某人分享所有权。这种情况经常发生在Y
的成员上,因为成员只能访问this
。