示例代码:
void testDetachThread(const string &str,int num)
{
for (int i=0;i<num;i++)
{
cout <<i<<" "<<"id:"<<this_thread::get_id()<<" "<< str << endl;
}
}
int main()
{
string str = "shen";
//const char* data = str.c_str();
thread detach_thread(testDetachThread, str.c_str(), 5);
detach_thread.detach();
}
这段代码很有可能出问题,在main函数执行完了,str被释放了才执行testDetachThread这个函数,那么久会访问非法指针。
- 构建临时对象
主线程一定会先构建一个临时对象,传递给子线程。
解决方案:
thread detach_thread(testDetachThread, string(data), 5);
以上代码用join不会出现问题,因为主线程会等待子线程执行完再继续执行。