C++ 线程_local and std::future object-对象的生存期是多少?

C++ 线程_local and std::future object-对象的生存期是多少?,c++,c++11,future,lifetime,C++,C++11,Future,Lifetime,以下是我的测试代码: vector<int> const & foo(int const counter) { thread_local static vector<int> v{counter, counter + 1, counter + 2}; return v; } int main() { using myFut = future<vector<int> const &>; vector

以下是我的测试代码:

vector<int> const & foo(int const counter)
{
    thread_local static vector<int> v{counter, counter + 1, counter + 2};
    return v;
}

int main()
{
    using myFut = future<vector<int> const &>;

    vector<myFut> futures;
    for(int i{0}; i < 5; ++i)
    {
        futures.push_back(async(launch::async, &foo, i * 3));
    }

    for(myFut & fut : futures)
    {
        vector<int> v{fut.get()}; // or vector<int> const & v{fut.get()};
        cout << v.size() << endl; // 0, I expect 3
    }

    return 0;
}
vector const&foo(int const计数器)
{
线程_局部静态向量v{counter,counter+1,counter+2};
返回v;
}
int main()
{
使用myFut=未来;
矢量期货;
对于(int i{0};i<5;++i)
{
push_back(异步(launch::async,&foo,i*3));
}
for(myFut和fut:期货)
{
向量v{fut.get()};//或向量常量&v{fut.get()};
库特
但是因为我使用的是std::future,所以变量的生存期应该延长到调用std::future::get()为止,对吗

事实并非如此。std::async使用的线程将在与未来相关联的
std::promise
上调用
set_value()
,然后它可以自由终止。因此,在
std::future::get()
返回之前,甚至在调用它之前,线程局部变量很可能会被销毁