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);
}
现在我确实意识到 boundFunc
和 asyncThread
对象在 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 以将其推到向量上。
我在 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
函数应该 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 以将其推到向量上。