gpt4 book ai didi

c++ - 使用 std::thread 操作类成员

转载 作者:行者123 更新时间:2023-11-27 22:50:56 25 4
gpt4 key购买 nike

我想使用 std::thread 访问和修改类的成员。

这是一个例子:

class bar {
public:
int a = 5;
void change_a() {
a = 10;
cout << "thread's a=" << a << endl;
}
};

int main( int argc, char ** argv )
{
bar object1;

std::thread t1(&bar::change_a,bar());
t1.join();

cout << "object's a=" << object1.a << endl;
return 0;
}

结果是:

thread's a=10

object's a=5

所以线程中的函数修改了变量并打印了它,但它显然没有更改 object1 因为当我打印它时,它仍然是相同的 (5)。

我的问题是,如果变量 10 不是对象,它现在在哪里?我该如何使用它?

最佳答案

std::thread t1(&bar::change_a, bar());
^^^

在这里您创建了一个临时的 bar 对象。然后,您在此 bar 对象上调用 change_a,因此 a 现在是 10。现在,当语句结束时,临时 bar 对象被销毁,包括变量 a

object1bar 无关,它只是另一个 bar 对象,因为您没有调用 change_a object1 上,object1a5

因此,为了回答您的问题,您正在创建 2 个 bar 类型的对象,但您只在一个 bar 上调用 change_a

关于c++ - 使用 std::thread 操作类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37237119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com