在这里查看第二个答案: What is the need for enable_shared_from_this?
它说: “简短的回答:当您需要在对象内部使用现有的共享指针来保护该对象时,需要使用enable_shared_from_this。
在对象外,您可以简单地分配并复制一个shared_ptr,因为您可以按原样处理shared_ptr变量。”
,然后在最后一行显示: “以及何时,为什么以及为什么需要一个共享的指针来代替这个,这是另一个问题。例如,它在异步编程中广泛用于回调绑定。”
在此,我想确切地问另一个问题。 “ enable_shared_from_this”和“ shared_from_this”的用例是什么?
答案 0 :(得分:0)
一个简单的用例是确保this
生存到某些异步或延迟操作结束为止:
class My_type : public std::enable_shared_from_this<My_type> {
public:
void foo() {}
void perform_foo() {
auto self = shared_from_this();
std::async(std::launch::async, [self, this]{ foo(); });
}
};
boost :: asio在其示例中大量使用了此技术: https://www.boost.org/doc/libs/1_66_0/doc/html/boost_asio/example/cpp11/allocation/server.cpp