C++ 向量 push_back for 循环中的异步对象

C++ vector push_back async object in for loop

我在 C++11 中编写了一个 for 循环,我需要在其中将一个异步对象推回一个向量。我想把对象初始化分成两步:

    std::vector<std::future<bool>> asyncThreads;

    for (int i = 0; i < processorCount; i++) {
        auto boundFunc = std::bind(&Foo::foo, this);
        auto asyncThread = std::async(std::launch::async, boundFunc)

        asyncThreads.push_back(asyncThread);
    }

现在我确实意识到 boundFuncasyncThread 对象在 for 循环结束时都超出了范围(push_back 函数应该 copy/move 值虽然),但是为什么直接声明 push_back call 中的对象有效呢?像这样:

    std::vector<std::future<bool>> asyncThreads;

    for (int i = 0; i < processorCount; i++) {
        asyncThreads.push_back(std::async(std::launch::async, std::bind(&Foo::foo, this)));
    }

一个std::future对象不可复制,但可移动。因此,您必须对对象调用 move 以将其推到向量上。