为什么我们使用 enable_shared_from_this 模板?
Why do we use enable_shared_from_this template?
最近遇到了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);
怎么了?
Whats wrong with shared_ptr p(new Y);?
它没有任何问题,唯一的问题是你可能没有在 class Y
的成员中使用它,有时你想要 return 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 );
}
shared_from_this
的要点是让您在 没有 shared_ptr
的情况下获得 shared_ptr
。这在您的示例中毫无意义,因为您的示例过于简单。想象一下,有一些函数只获得 Y*
或 Y&
,并且它需要与某人共享所有权。 Y
的 成员 经常发生这种情况,因为成员只能访问 this
.
最近遇到了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);
怎么了?
Whats wrong with shared_ptr p(new Y);?
它没有任何问题,唯一的问题是你可能没有在 class Y
的成员中使用它,有时你想要 return 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 );
}
shared_from_this
的要点是让您在 没有 shared_ptr
的情况下获得 shared_ptr
。这在您的示例中毫无意义,因为您的示例过于简单。想象一下,有一些函数只获得 Y*
或 Y&
,并且它需要与某人共享所有权。 Y
的 成员 经常发生这种情况,因为成员只能访问 this
.