One of the example where std::ref
is necessary:
void update(int &data) //expects a reference to int
{
data = 15;
}
int main()
{
int data = 10;
// This doesn't compile as the data value is copied when its reference is expected.
//std::thread t1(update, data);
std::thread t1(update, std::ref(data)); // works
t1.join();
return 0;
}
The std::thread
constructor copies the supplied values, without converting to the expected argument type (which is reference type in this case, seeupdate()
). So we need to wrap the arguments that really needs to be references in std::ref
.