调用std::atomic_fetch_add,get'';对';原子取数加数';错误 我的背景是在Swift和ObjuleC中,所以我对我正在处理的C++文件中的行为感到困惑。

调用std::atomic_fetch_add,get'';对';原子取数加数';错误 我的背景是在Swift和ObjuleC中,所以我对我正在处理的C++文件中的行为感到困惑。,c++,ios,xcode,deprecation-warning,C++,Ios,Xcode,Deprecation Warning,首先,这一行: OSAtomicIncrement32Barrier(&changeCounter); 在Xcode中,它显示警告: “OsatomicIncrement32载体”已被弃用:iOS 10.0中的第一个弃用版本-Use std::atomic_fetch_add())显示使用中的atomic_fetch_add,我似乎也在用同样的方法 你知道如何解决这个问题吗?让我走上了正确的道路,但除此之外还需要一点修炼。主要的解决方案是我将changeconter的定义从 volat

首先,这一行:

OSAtomicIncrement32Barrier(&changeCounter);
在Xcode中,它显示警告:

“OsatomicIncrement32载体”已被弃用:iOS 10.0中的第一个弃用版本-Use std::atomic_fetch_add())显示使用中的
atomic_fetch_add
,我似乎也在用同样的方法

你知道如何解决这个问题吗?

让我走上了正确的道路,但除此之外还需要一点修炼。主要的解决方案是我将
changeconter
的定义从

volatile int32_t changeCounter = 0;

std::atomic changeCounter={0};
请注意
0
:这是因为
std::atomic
没有复制构造函数,因此仅使用
0
会产生错误

复制类型为“std::atomic”(又名“atomic”)的成员子对象将调用已删除的构造函数


根据答案,将要赋值的值放在大括号中可以避免使用复制构造函数,因此,解决这个问题。

注意<代码>变更符>代码>需要是代码> STD::原子< /代码>参见:在当前C++ >代码>易失性< /代码>与多线程无关。@ RICHARDCRITTEN,我将检查<代码>原子< /代码>类型,欢呼。这个文件最初是由Apple编写的,
volatile
就是从这里开始的。@RichardCriten我已经将
changeCounter
更改为
std::atomic
,但是现在我得到了这个错误:“复制'std::atomic'(也称为'atomic')类型的成员子对象调用已删除的构造函数”
volatile int32_t changeCounter = 0;
volatile int32_t changeCounter = 0;
std::atomic<int32_t> changeCounter = {0};