我是 C++ 线程的新手,我试图清楚地了解内存是如何在线程之间共享/不共享的。我正在使用std::thread
C++11。根据我在其他 SO 问题上所读到的内容,堆栈内存仅由一个线程拥有,而堆内存在线程之间共享。因此,根据我对堆栈与堆的理解,以下应该是正确的:
#include <thread>
using namespace std;
class Obj {
public:
int x;
Obj(){x = 0;}
};
int main() {
Obj stackObj;
Obj *heapObj = new Obj();
thread t([&]{
stackObj.x++;
heapObj->x++;
});
t.join();
assert(heapObj->x == 1);
assert(stackObj.x == 0);
}
如果我搞砸了一堆东西,请原谅我,lambda 语法对我来说很新。但希望我正在尝试做的是连贯的。这会按我的预期执行吗?如果不是,我有什么误解?