匿名可调用对象不由 std::thread 执行

问题描述

我一直在练习一些 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 (将#修改为@)