スレッド化と C++ メモリ モジュールの詳細を学ぶために、C++ Concurrency in Action という本を読んでいます。次のコードでコピー コンストラクターが呼び出される回数に興味があります。
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 デバッガーでこのコードを確認すると、コピー コンストラクターが 4 回呼び出されていることがわかります。メインスレッドから 3 回呼び出され、次に新しいスレッドから 1 回呼び出されます。新しいスレッドのオブジェクトのコピーを作成したため、1 つを期待していました。3 つの余分なコピーが作成されるのはなぜですか?