问题描述
我一直在练习一些 C/C++ 线程教程。我发现以下示例代码没有按我预期的那样工作。
class CallableObject
{
public:
CallableObject(): _i(1000) {}
CallableObject(int i): _i(i) {
std::cout << "constructor called\n";
}
void operator()()
{
std::cout << _i << endl;
}
private:
int _i;
};
int main()
{
CallableObject callable_object(100);
std::thread t(CallableObject());
std::thread t2(CallableObject(10));
std::thread t3(callable_object);
sleep(10);
return 0;
}
我预计即使给定一个匿名可调用对象,线程 t 仍然会执行 operator() 并打印出 1000。但编译后的结果是这样的:
constructor called
constructor called
100
10
terminate called without an active exception
...Program finished with exit code 0
谁能解释为什么线程 t 没有成功构建?此问题与对象生存期或 r 值引用有关吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)