我在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);
}
现在我意识到
boundFunc
和
asyncThread
对象在for循环结束时超出范围(
push_back
函数应该复制/移动值),但为什么直接在
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)));
}