微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决匿名可调用对象不由 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 举报,一经查实,本站将立刻删除。