调用返回std::atomic_bool的函数触发拷贝构造删除错误如何修复?
问题根因
std::atomic 系列类型的拷贝构造函数被C++标准明确删除,禁止拷贝操作。你当前的isStarted()函数返回值类型声明为std::atomic_bool,执行return started时会尝试拷贝类内的std::atomic_bool成员对象,因此直接触发了编译报错。你实际需要返回的是原子变量存储的布尔值,而非原子对象本身。
修复方案
只需要将函数返回值类型改为bool即可,两种写法可选:
- 直接依赖
std::atomic<bool>的内置类型转换运算符,写法最简洁:
class A { public: bool isStarted(); // 其余逻辑保持不变 private: std::atomic_bool started; }; // 补充:原代码类定义末尾遗漏分号,需补上避免额外编译错误 bool A::isStarted() { return started; }
- 显式调用
load()方法获取值,可自定义内存序,语义更清晰:
bool A::isStarted() { // 内存序可根据实际并发场景调整,常用的有memory_order_relaxed、memory_order_acquire等 return started.load(std::memory_order_acquire); }
内容的提问来源于stack exchange,提问作者committedandroider
相关产品推荐
相关产品推荐

