Can anybody explain me why
void doSomething(vector<int>& vec) {
for (int i = 0; i < 100; ++i)
vec.push_back(i);
}
int main(int argc, char** argv) {
vector<int> v;
thread t1(doSomething, v);
thread t2(doSomething, v);
t2.join();
t1.join();
cout << v.size() << endl;
return 0;
}
prints 0, while the same thing with a pointer prints 200
void doSomething(vector<int>* vec) {
for (int i = 0; i < 100; ++i)
vec->push_back(i);
}
int main(int argc, char** argv) {
vector<int>* v = new vector<int>();
thread t1(doSomething, v);
thread t2(doSomething, v);
t2.join();
t1.join();
cout << v->size() << endl;
return 0;
}
Shouldn't working on a reference be equal (to working on a pointer) here?
Edit: it's not thread-safe on purpose
Can you provide me with a reference as to why do I need to use std::ref?