在阅读C ++ 11中的多线程时,我注意到一些教程会这样做:
std::thread(print_message, "Hello").detach();
// instead of...
std::thread t(print_message, "Hello");
t.detach();
我的问题是:
std::thread
?答案 0 :(得分:10)
std::thread
的行为与其他任何类型相同。答案 1 :(得分:5)
要详细说明第二个问题,临时std::thread
对象的行为与任何其他临时对象相同:
在评估绑定的full expression之后销毁它,这意味着在.detach()
调用后始终调用the destructor - std::terminate()
未被调用。
答案 2 :(得分:1)
回答问题1: 您无权修改“非类”类型(即内置类型)的匿名临时对象。但是,您可以在“类”类型的匿名临时对象上调用非常量成员函数。 参见C ++ ISO / IEC 14882:1998标准中的3.10.10。