Рассмотрим эту программу, которая по существу создает std::thread
, которая вызывает функцию func()
с arg
в качестве аргумента:
#include <thread>
#include <iostream>
struct foo {
foo() = default;
foo(const foo&) { std::cout << "copy ctor" << std::endl; }
foo(foo&&) noexcept { std::cout << "move ctor" << std::endl; }
};
void func(foo){}
int main() {
foo arg;
std::thread th(func, arg);
th.join();
}
Мой вывод
copy ctor
move ctor
move ctor
Насколько Я понимаю, что arg
копируется внутри объекта потока и затем передается в func()
как значение (перемещено). Итак, я ожидаю одна копия конструкции и одна конструкция хода .
Почему существует вторая конструкция хода?