为什么人们可能需要shared_from_this而不是直接使用此指针?

时间:2019-06-07 14:48:00

标签: c++11

在这里查看第二个答案: What is the need for enable_shared_from_this?

它说: “简短的回答:当您需要在对象内部使用现有的共享指针来保护该对象时,需要使用enable_shared_from_this。

在对象外,您可以简单地分配并复制一个shared_ptr,因为您可以按原样处理shared_ptr变量。”

,然后在最后一行显示: “以及何时,为什么以及为什么需要一个共享的指针来代替这个,这是另一个问题。例如,它在异步编程中广泛用于回调绑定。”

在此,我想确切地问另一个问题。 “ enable_shared_from_this”和“ shared_from_this”的用例是什么?

1 个答案:

答案 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