почему отсоединение потока не получает выходного сообщения? - PullRequest
0 голосов
/ 21 ноября 2019

Я тестирую код cpp, как показано ниже, и получил одно очень запутанное явление, ниже код не печатает строку "label". Кто-нибудь может это объяснить? действительно спасибо за вашу помощь!

class Data {
public:
  Data() { std::cout << __FUNCTION__ << std::endl; }
  ~Data() { std::cout << __FUNCTION__ << std::endl; }
  void show() { std::cout << label << std::endl; }

private:
  std::string label{"label"};
};

int main() {
  auto data = std::make_shared<Data>();
  std::thread t([=]() mutable{
    data->show();
  });

  t.detach();
}

1 Ответ

3 голосов
/ 21 ноября 2019

Как уже упоминалось в разделе комментариев Mat, ничто не мешает программе завершиться еще до начала потока.

Измените t.detach() на t.join().

С cppreference on join

ожидает завершения выполнения потока

...