Я читаю книгу С++ Concurrency в действии, чтобы узнать больше о потоковом и модуле памяти С++. Мне интересно, сколько раз конструктор копирования вызывается в следующем коде:
struct func
{
func() = default;
func(const func& _f) {}
void operator()() {}
};
int main()
{
func f;
std::thread t{ f };
t.join();
return 0;
}
Когда я просматриваю этот код в отладчике Visual Studio 2013, я вижу, что экземпляр-конструктор называется четыре раза. Он трижды вызывался из основного потока, а затем один раз из нового. Я ожидал его, поскольку он сделал копию объекта для нового потока. Почему созданы три дополнительных копии?