You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从atomic数组返回atomic元素?返回atomic_ullong编译报错如何解决

报错原因

std::atomic 系列类型为了保证原子操作的语义正确性,显式删除了拷贝构造函数和拷贝赋值函数,完全禁止了原子对象的拷贝操作——因为原子对象的拷贝过程无法保证原子性,随意拷贝会引发不可预期的并发问题。
你代码中 get_stat 方法的返回值类型为 atomic_ullong(即 std::atomic<unsigned long long>),执行 return stats[index]; 时需要将数组中的原子对象拷贝构造为返回值临时对象,触发了被删除的拷贝构造函数,因此编译器抛出对应的错误。

解决方案

有两种常用的修复方案,可根据实际业务需求选择:

  • 方案1:返回原子变量存储的普通数值(最常用,适配仅需要读取统计值的场景)
    将返回值类型改为普通的 unsigned long long,通过原子类型的 load() 方法线程安全地读取原子变量存储的数值,全程不需要拷贝原子对象本身:
// 修改后的 get_stat 方法
unsigned long long get_stat(int index) { 
    return stats[index].load(); 
}
  • 方案2:返回原子对象的引用(适配需要外部直接操作该原子变量的场景)
    将返回值类型改为原子类型的左值引用,不需要拷贝原子对象,直接返回数组中原子对象的引用即可:
// 修改后的 get_stat 方法
atomic_ullong& get_stat(int index) { 
    return stats[index]; 
}

注意:返回原子对象引用后,外部可直接对该原子变量进行读写操作,需要你自行保证多线程场景下的操作符合预期的并发逻辑。

内容的提问来源于stack exchange,提问作者rzambre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 06:51:02