我偶然发现std :: enable_shared_from_this,尤其是similar question,但我仍然不明白这是什么意思
反复出现的例子如下:
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();
}
但是我没有得到这个例子,如果我在这种情况下我会这样做:
int main()
{
shared_ptr<Y> p(new Y);
shared_ptr<Y> q = p; // Results in exactly the same thing
}
由于
编辑:我认为结束这个问题的人并不理解我的意图。该帖子被标记为另一个帖子的副本,而此帖子的第一行链接到同一个“其他帖子”。我有一个问题,所谓的副本没有答案。
具体而言,需要将实现enable_shared_from_this的类创建为std :: shared_ptr。因此,您可以访问该shared_ptr。我的问题是(在标题中提到你),“因为你被迫拥有一个std :: shared_ptr,跟踪它实际上是否会使std :: enable_shared_from_this无用/冗余?”
答案 0 :(得分:2)
立刻想到两个用例:
它允许对象将自己移交给保存共享指针的其他东西。对象本身并不拥有共享副本。 shared_from_this
的要点是为对象提供内部weak_ptr
。
由于传递共享指针是昂贵的(并且冗余,当您知道它总是在调用堆栈中拥有时),标准做法是将包含的对象作为参考传递。如果在调用堆栈的某处,您需要再次获取共享指针,则可以通过shared_from_this
执行此操作。