c++ - 为什么用 std::thread 调用复制构造函数 3 次?
问题描述
我的代码在这里,我不明白为什么有 3 次调用复制构造函数...
struct Person
{
std::string name;
int age;
Person(std::string name, int age) : name(name), age(age){
std::cout << "some constructor" << std::endl;
};
Person(const Person& person) {
std::cout << "copy constructor" << std::endl;
name = person.name;
age = person.age;
};
};
void print_person(Person person)
{
std::cout << "in print_person" << std::endl;
std::this_thread::sleep_for(std::chrono::milliseconds(500));
std::cout << "in print_person, person = " << person.name << ", " << person.age << std::endl;
}
int test()
{
std::thread ta(print_person, std::move(Person("zjp", 12)));
ta.detach();
std::this_thread::sleep_for(std::chrono::milliseconds(100));
}
int main()
{
test();
std::cout << "test have finished" << std::endl;
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
return 0;
}
和标准输出
some constructor
copy constructor
copy constructor
copy constructor
in print_person
test have finished
in print_person, person = zjp, 12
为什么调用复制构造函数 3 次?我只知道2个~ emmmm 谢谢谢谢谢谢
解决方案
推荐阅读
- java - 如何为 OpenNLP 准备训练数据以对包含多个单词的 token 进行 Tokenize?
- c# - Visual Studio 2015 封装字段添加到错误的行
- r - 单独保存模拟数据集(速度+内存限制)
- javascript - 从底部导航反应原生更改屏幕
- javascript - 我的秒表中的毫秒单位(js)
- php - 带有来自ajax的数组的MYSQL查询
- ruby-on-rails - 如何在没有javascript的情况下在rails(最后通牒)中创建倒计时
- javascript - Alfresco 内容服务 ADF APP。在客户端启用 CORS?
- solidity - Solidity循环并在一个函数中写入数据
- python - UnicodeEncodeError:“charmap”编解码器无法对位置 0-9 中的字符进行编码:字符映射到