gpt4 book ai didi

c++ - 初始化静态原子成员变量

转载 作者:IT老高 更新时间:2023-10-28 21:37:37 25 4
gpt4 key购买 nike

我想以线程安全的方式为名为 order 的类生成标识符。下面的代码无法编译。我知道原子类型没有复制构造函数,我假设这解释了为什么这段代码不起作用。有谁知道让这段代码真正起作用的方法吗?我还在学习,所以如果我走错了路,也请告诉我(如果是这样,如果你能指出另一种方法,我将不胜感激)。谢谢!

#include <atomic>
#include <iostream>

class order {
public:
order() { id=c.fetch_add(1); }
int id;
private:
static std::atomic<int> c;
};

std::atomic<int> order::c = std::atomic<int>(0);

int main() {
order *o1 = new order();
order *o2 = new order();
std::cout << o1->id << std::endl; // Expect 0
std::cout << o2->id << std::endl; // Expect 1
}

编译上面的结果如下错误:

order.cpp:45:51: error: use of deleted function 
‘std::atomic<int>::atomic(const std::atomic<int>&)’
In file included from order.cpp:3:0:
/usr/include/c++/4.7/atomic:594:7: error: declared here

最佳答案

I know that the atomic types do not have copy constructors, and I assume that explains why this code does not work.

是的,错误说得很清楚。

Does anybody know a way to actually get this code to work?

而不是从临时复制初始化,这需要一个可访问的复制构造函数:

std::atomic<int> order::c = std::atomic<int>(0);

使用直接初始化,而不是:

std::atomic<int> order::c(0);   // or {0} for a more C++11 experience

你可能更喜欢这样,除非你喜欢阅读不必要的冗长代码。

关于c++ - 初始化静态原子成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20453054/

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