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

编译DGSF-AvA项目时遭遇std::atomic已删除拷贝构造函数错误

解决方案:修复std::atomic拷贝构造函数删除的编译错误

错误根源

你遇到的编译错误并非来自atomic变量的初始化,而是在printf调用中直接传递std::atomic<uint32_t>对象导致的:

printf("not my turn:  me %u  turn %u\n", current_id, current_turn);

std::atomic的拷贝构造函数被显式删除(deleted function),而printf的可变参数列表会尝试对传入的current_turn执行拷贝操作,从而触发编译报错。

修复代码

将printf中的current_turn替换为原子变量的load()方法调用,获取其当前值:

printf("not my turn:  me %u  turn %u\n", current_id, current_turn.load());

如果不需要严格的内存顺序保证,可指定更轻量的内存序提升性能:

printf("not my turn:  me %u  turn %u\n", current_id, current_turn.load(std::memory_order_relaxed));

补充说明

  • 你尝试的几种current_turn初始化方式((0)、{0}、={0})在C++14标准下均合法,这不是问题所在。
  • std::atomic<uint32_t>和std::atomic_int的拷贝行为一致,均不允许拷贝构造,因此错误与原子变量的具体类型无关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 22:05:27