gpt4 book ai didi

c++ - 具有 std::atomic 成员变量的类的复制构造函数/赋值运算符出错

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

我有一个像下面这样的类(class)。

#include <atomic>

static const long myValue = 0;

class Sequence
{

public:

Sequence(long initial_value = myValue) : value_(initial_value) {}


private:

std::atomic<long> value_;
};

int main()
{
Sequence firstSequence;
Sequence secondSequence = firstSequence;
return 0;
}

我收到这样的编译错误,

test.cpp:21:36: error: use of deleted function ‘Sequence::Sequence(const Sequence&)’
test.cpp:5:7: error: ‘Sequence::Sequence(const Sequence&)’ is implicitly deleted because the default definition would be ill-formed:
test.cpp:5:7: error: use of deleted function ‘std::atomic<long int>::atomic(const std::atomic<long int>&)’

在这种情况下,默认的复制构造函数和赋值操作符是否不起作用?

PS:我使用的是 gcc 版本 4.6.3

最佳答案

您不能使用标准复制构造函数复制原子,因为所有加载和存储都必须显式发生。您必须为 Sequence 编写自己的复制构造函数,该构造函数对 value_(rhs.value_.load()) 形式进行一些初始化(可能使用更宽松的内存排序)。

关于c++ - 具有 std::atomic 成员变量的类的复制构造函数/赋值运算符出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12003024/

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