首页 > 解决方案 > 为什么用 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 谢谢谢谢谢谢

标签: c++multithreading

解决方案


推荐阅读