Moving std::thread

12,072

Solution 1

Named references are lvalues. Lvalues don't bind to rvalue references. You need to use std::move.

threadFoo = std::move(threadBar);

Solution 2

See also std::thread::swap. This could be implemented as

std::thread threadFoo;
std::thread threadBar = std::thread(threadFunction);
threadBar.swap(threadFoo);
Share:
12,072

Related videos on Youtube

Kolyunya
Author by

Kolyunya

Developer

Updated on June 04, 2022

Comments

  • Kolyunya
    Kolyunya almost 2 years

    Trying the make simple piece of code work:

    std::thread threadFoo;
    
    std::thread&& threadBar = std::thread(threadFunction);
    
    threadFoo = threadBar; // thread& operator=( thread&& other ); expected to be called
    

    Getting an error:

    use of deleted function 'std::thread& std::thread::operator=(const std::thread&)'

    I explicitly define threadBar as an rvalue reference, not a ordinary one. Why is not expected operator being called? How do I move one thread to another?

    Thank you!