Программа аварийно завершается при выходе из функции с std::thread
void start_background() {
std::thread t(worker);
// больше в функции ничего нет
}
При выходе из start_background процесс завершается аварийно, в выводе — сообщение о вызове terminate. Почему?
- Поток просто продолжит работать в фоне: никакой проблемы в этом коде нет, объект потока уничтожать безопасно
- Код не соберётся: конструктор std::thread требует вызвать join в той же области видимости, где создан объект
- Функция worker не успевает стартовать до выхода из start_background, поэтому происходит обращение по нулевому указателю и процесс падает
- Деструктор std::thread у всё ещё присоединяемого потока вызывает terminate: поток нужно присоединить или отсоединить
