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

调用返回std::atomic_bool的函数触发拷贝构造删除错误如何修复?

问题根因

std::atomic 系列类型的拷贝构造函数被C++标准明确删除,禁止拷贝操作。你当前的isStarted()函数返回值类型声明为std::atomic_bool,执行return started时会尝试拷贝类内的std::atomic_bool成员对象,因此直接触发了编译报错。你实际需要返回的是原子变量存储的布尔值,而非原子对象本身。

修复方案

只需要将函数返回值类型改为bool即可,两种写法可选:

  1. 直接依赖std::atomic<bool>的内置类型转换运算符,写法最简洁:
class A {
public:
    bool isStarted();
    // 其余逻辑保持不变
private:
    std::atomic_bool started;
}; // 补充:原代码类定义末尾遗漏分号,需补上避免额外编译错误

bool A::isStarted() {
    return started;
}
  1. 显式调用load()方法获取值,可自定义内存序,语义更清晰:
bool A::isStarted() {
    // 内存序可根据实际并发场景调整,常用的有memory_order_relaxed、memory_order_acquire等
    return started.load(std::memory_order_acquire);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 06:45:04