【发布时间】:2013-12-17 03:58:21
【问题描述】:
我正在查看 shared_ptr 和 enable_shared_from_this 的 boost 文档,但我无法弄清楚 enable_shared_from_this 的实际用途。
以下是我对 enable_shared_from_this 的理解(示例复制自What is the usefulness of `enable_shared_from_this`?)。
class Y: public enable_shared_from_this<Y>
{
public:
Y(): count(3){}
shared_ptr<Y> f()
{
return shared_from_this();
}
int count;
}
int main()
{
shared_ptr<Y> p(new Y);
shared_ptr<Y> q = p->f();
cout << "\n Count from P is " << p1->count;
cout << "\n Count from q is " << q1->count;
}
所以,现在我们有一个共享指针 q,它指向 p (new Y) 拥有的同一个对象,当 p 和 q 都超出范围时,该对象被销毁。上面的两个打印语句都将打印 3 作为计数。
现在,我可以通过以下操作在不使用 enable_shared_from_this 的情况下实现相同的目标。
class Y
{
public:
Y(): count(3){}
int count;
}
int main()
{
shared_ptr<Y> p(new Y);
shared_ptr<Y> q(p);
cout << "\n Count from P is " << p1->count;
cout << "\n Count from q is " << q1->count;
}
即使在上面的例子中,P 和 Q 都指向同一个对象,并且会打印 3。
那么,使用 enable_shared_from_this 有什么好处?
【问题讨论】:
-
您在指向的示例中没有提到
count。回答者的意思是内部的shared_ptr计数。 -
一个疯狂的想法:
shared_from_this是使用delete this的旧 C++ 代码的某种“成人版”;即它吸引了同样肮脏的头脑。 -
@g-makulik - 我相信我的问题与之前在 SO 中提出的问题不同。我的问题是,上面的两个示例都为对象 Y 提供了共享所有权。在这种情况下,我们为什么要使用 enable_shared_from_this?与第二个示例相比,enable_shared_from_this 提供了什么好处?
-
@devana 很好地解释了为什么它是必要的和有用的,我没有看到你的问题在另一个问题之上增加了任何价值。这不仅仅是重新措辞和稍微改变样本,而是构成了一个新问题。
-
@KerrekSB 帽子提示twitter.com/sehetw/status/519773714003402752
标签: c++ boost shared-ptr