当前位置: 首页 > news >正文

【C++学习笔记】 std::atomic 拷贝构造错误解析

std::atomic<int> flag_0x52 = 0;

以上代码报错如下:

public.cpp:55:18: Copying variable of type 
'std::atomic<int>' invokes deleted constructor 
xxatomic:200:2: 'atomic' has been explicitly marked deleted here

std::atomic<int> flag_0x52 = 0; 触发了 C++ 中 std::atomic 的拷贝构造函数被显式删除(deleted)的限制。以下是原因和解决方案:

错误原因

  1. std::atomic 不可拷贝
    std::atomic 的设计禁止拷贝构造和拷贝赋值(这些函数被标记为 = delete)。这是为了确保原子操作的独占性,避免意外复制破坏原子性。

  2. 初始化语法问题
    代码使用了拷贝初始化(copy-initialization):

    std::atomic<int> flag_0x52 = 0; // 尝试调用拷贝构造函数(实际不可用)

    虽然看起来是用 0 初始化,但编译器会尝试将其解释为 std::atomic<int> temp(0); flag_0x52 = temp;,进而触发拷贝操作。


解决方案

✅ 方法 1:使用直接初始化(推荐)

用圆括号 () 替代等号 =

std::atomic<int> flag_0x52(0); // 正确:调用构造函数而非拷贝构造
✅ 方法 2:使用大括号初始化(C++11 起)
std::atomic<int> flag_0x52{0}; // 正确:列表初始化,不涉及拷贝
✅ 方法 3:分步初始化
std::atomic<int> flag_0x52; // 默认构造(值为0) // 或后续赋值flag_0x52 = 42; // 调用operator=,合法

关键原则

  • 避免任何形式的拷贝:包括函数传参、返回值、容器操作等。需要传递时使用引用或指针。

  • 初始化用 () 或 {}:确保直接调用构造函数而非触发拷贝。

错误示例修正

// 错误:尝试拷贝构造

std::atomic<int> a = 10; // ❌

std::atomic<int> b = a; // ❌ 显式拷贝

// 正确:直接构造

std::atomic<int> a(10); // ✅

std::atomic<int> b(a.load()); // ✅ 先读取值再构造(非拷贝原子对象本身)

提示:检查代码中其他可能涉及 std::atomic 复制的场景(如函数传参 void foo(std::atomic<int>) 需改为 void foo(std::atomic<int>&))。

http://www.xdnf.cn/news/998515.html

相关文章:

  • docker-compose容器单机编排
  • el-select+el-tree实现树形下拉选择
  • tabs页签嵌套表格,切换表格保存数据不变并回勾
  • CSS 外边距合并(Margin Collapsing)问题研究
  • Karate 与Playwright的比较和融合
  • spring boot项目整合mybatis实现多数据源的配置
  • RAG Food Project
  • GAN+ECA注意力机制实现图像超分辨率重建
  • ESP32-C3FH4X—低功耗、高集成度的 MCU 系统级芯片 (SoC)
  • 基于数据库实现配置管理和定时任务启停
  • 强化学习:策略梯度概念
  • word用endnote插入国标参考文献
  • 在 Flutter 项目中iOS 的 App 图标和 App 名称 的设置
  • 探索 Excel-to-JSON:高效数据转换的利器
  • Linux Alias 魔法:命令行效率提升秘籍
  • R语言缓释制剂QBD解决方案之四
  • RK3588 + Ubuntu24.04 部署 rknn 模型——不用[特殊字符]版全流程教程
  • 管家婆软件下载中心-管家婆软件辉煌安装包下载、应用程序、最新版软件
  • STL难记忆却常用的用法集合(持续更新中)
  • 自动驾驶系统研发系列—AI大模型驱动的智能座舱:从概念到落地的工程解析
  • MonkeyOCR: 基于结构-识别-关系三元组范式的文档解析
  • 客户端登录not foud的问题解决
  • PostgreSQL 用户名大小写处理规则
  • 黑龙江亿林网络启盛裸金属服务器评测:24 核 32G + 联通千兆共享,高负载业务的新利器
  • ​​​​​​​《TCP/IP协议卷1》第9章 IP选路
  • 鸟类识别与分类相关数据集(猫脸码客第252期)
  • 医疗行业网络安全的综合防护策略
  • 大模型在关键社会领域的应用研究:金融、医疗和法律
  • 一种安全实用、准确率高的Text2Sql方案
  • element 跨页选中,回显el-table选中数据