我在C ++中使用promises,并且拥有这个非常简单的程序。我创建了一个promise,并将其传递给线程函数引用。
在线程内部,我创建一个字符串,然后将promise的值设置为该字符串。然后在主程序中,我使用未来检索promise的值。我很困惑为什么字符串的地址不会保持不变?理想情况下,它不应该在线程之间变化,因为它属于共享内存吗?
void tfunc(promise<string> & prms) {
string str("Hello from thread");
cout << (void *)str.data() << endl;
prms.set_value(str);
}
int main() {
promise<string> prms;
future<string> ftr = prms.get_future();
thread th(&tfunc, ref(prms));
string str = ftr.get();
// This address should be the same as that inside the thread, right?
cout << (void *)str.data() << endl;
th.join();
return 0;
}