【发布时间】:2021-12-28 02:10:16
【问题描述】:
如果我想为 A 类返回一个 shared_ptr,我应该使用 shared_from_this() 功能。但是我认为在我已经为 A 定义了 shared_ptr 之后这将起作用。因此,如果另一个地方想要一个 shared_ptr,我只需使用我制作的那个。我想知道何时使用 shared_from_this()。
示例代码:
class A : public enable_shared_from_this<A> {
public:
int a = 0;
shared_ptr<A> get_this() {
return shared_from_this();
}
};
int main() {
shared_ptr<A> ptr_a(new A);
cout << ptr_a.use_count() << endl;
shared_ptr<A> ptr_b = ptr_a->get_this();
// if somewhere else wants a ptr I just use, shared_ptr<A> ptr_b = ptr_a; after pass it
// into a function, what situation should i use shared_from_this() for instead ???
cout << ptr_a.use_count() << endl;
cout << ptr_b.use_count() << endl;
}
【问题讨论】:
-
您应该在需要时使用它,它很方便。如果您觉得不需要使用它,请不要使用它。很少需要。
-
我觉得什么时候用
shared_from_this这个问题很好,但是你的理解有点偏离。如果您已经拥有shared_ptr,则您不需要需要使用shared_from_this。shared_from_this作为一种从类inside 中获取自身shared_ptr的机制而存在——这对于异步消息回调等某些情况很有用。除非出现这种情况,否则您可能根本不需要使用它 -
@Human-Compiler 已经将我的问题改为您的建议。当我看到“从班级内部获取其自身的 shared_ptr”时,您的回答给了我一个提示。非常感谢。
-
shared_ptr比shared_from_this使用更频繁/更广泛。shared_from_this有时用于设计相对复杂的多线程编程中。如需参考,请参阅this 关于 enable_shared_from_this 的帖子 - 概述、示例和内部。 -
@aafulei 非常有用的信息和您回复中的链接,非常感谢。
标签: c++ shared-ptr enable-shared-from-this