【发布时间】:2018-10-18 13:00:30
【问题描述】:
最近遇到了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); 有什么问题?
【问题讨论】:
-
未透露姓名且不可见的投票者,请考虑发表评论
-
不是我,但我不确定你在问什么。您可以在共享指针中使用新变量。您需要此实例方法来获取共享引用计数的事物:stackoverflow.com/questions/712279/…
-
这是一个糟糕的例子,因为你可以使用
auto q = p;。 -
@EduardRostomyan 你在这里不需要
shared_from_this。std::shared_ptr<Y> q = p;在这里很好。shared_from_this仅在您需要shared_ptr到已由shared_ptr拥有的实例但您无法直接访问该指针的副本时才相关。 -
@Eljay "一个学派" 另一个“学派”说如果一个对象是“自我意识的”,这应该是一个很好的理由,因为设计意味着也就是说,它应该是类的不变量(我们称它为
managed),然后shared_from_this是脆弱和不足的,你应该提供一个工厂函数来制作对象(make_managed)并且不允许构造由new或自动或静态对象或成员。
标签: c++ c++11 boost shared-ptr c++-standard-library