operator[]
для std::smatch
возвращает sub_match
, который можно рассматривать как пару итераторов сопоставляемых символов.
После вызова regex_match
вы можете использовать operator[]
для доступа к под-матчам, пока существует event
.Когда event
удаляется (вы не присоединяетесь к своей ветке, поэтому start
немедленно возвращается, а event
уничтожается), подспички имеют висячие указатели и не должны быть доступны.
m_thread = std::thread(&test_t::thread_func, this, match[1]);
это не работает, потому что, когда функция выходит из области видимости, событие удаляется, а под-совпадение имеет висячие указатели.
m_thread = std::thread(&test_t::thread_func, this, match[1].str());
это работает, потому что str()
возвращает копию совпавшей строки.
m_thread = std::thread(&test_t::thread_func, this, (std::string)match[1]);
это также работает, потому что временная строка создается на основе суб-соответствия match[1]
, а temp передается в поток.