Почему может понадобиться shared_from_this вместо прямого использования этого указателя? - PullRequest
0 голосов
/ 07 июня 2019

Посмотрите на второй ответ здесь: Зачем нужен enable_shared_from_this?

, он говорит: «Краткий ответ: вам нужно enable_shared_from_this, когда вам нужно использовать внутри самого объекта существующий общий ресурсуказатель, защищающий этот объект.

Вне объекта вы можете просто назначить и скопировать shared_ptr, поскольку вы имеете дело с переменной shared_ptr как есть. "

и далее в последней строке написано:«А когда и почему может понадобиться общий указатель на это, а не просто на этот вопрос, это совсем другой вопрос. Например, он широко используется в асинхронном программировании для привязки обратных вызовов».

Вот в этом посте я хочузадать именно этот другой вопрос.Что такое вариант использования для "enable_shared_from_this" и "shared_from_this"?

1 Ответ

0 голосов
/ 07 июня 2019

Простой пример использования: 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...