【发布时间】:2018-07-27 08:28:28
【问题描述】:
我有一个类 Tester 包含一个 std:thread 对象和一个 std::vector 的 Tester。我知道我不能复制线程,所以push_back 是不可能的,但为什么emplace_back 不起作用?我的代码中的副本在哪里?
#include <iostream>
#include <thread>
#include <vector>
#include <functional>
#include <unistd.h>
class Tester
{
public:
Tester(std::function<void(void)> func) :
th(func)
{
}
~Tester()
{
th.join()
}
private:
std::thread th;
};
std::vector<Tester> testers;
void InnerHelloWorld()
{
std::cout << "Hello from the inner word!\n";
}
int main() {
std::cout << "Hello World!\n";
for(size_t i = 0 ; i < 4 ; i++)
{
testers.emplace_back(InnerHelloWorld);
}
sleep(1);
return 0;
}
【问题讨论】:
-
另外,你可以在这里测试一下:repl.it/repls/QuietTidyScientificcomputing
-
你必须写一个移动构造函数,这里没有隐式声明。
-
顺便说一句,
push_back可以很好地与右值配合使用(即,如果您有移动 c'tor),但出于风格原因,我更喜欢emplace_back。
标签: c++ multithreading c++11