10

スレッド化と 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 つの余分なコピーが作成されるのはなぜですか?

4

1 に答える 1