我正在阅读 C++ Concurrency in Action 一书,以了解有关线程和 C++ 内存模块的更多信息。我很好奇复制构造函数在以下代码中被调用的次数:
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 调试器中浏览这段代码时,我看到复制构造函数被调用了四次。从主线程调用它三次,然后从新线程调用一次。我期待一个,因为它为新线程制作了对象的副本。为什么要创建三个额外的副本?