C++ – linux编译C++代码出现error: use of deleted function std::atomic::atomic(const std::atomic&)
本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:C++ – linux编译C++代码出现error: use of deleted function std::atomic
原文链接:https://www.stubbornhuang.com/2099/
发布于:2022年04月20日 16:36:36
修改于:2022年04月20日 17:07:40
1 linux编译C++代码出现error: use of deleted function std::atomic::atomic(const std::atomic&)
今天在Ubuntu,GCC版本为7.5编译类似以下C++代码时出现了error: use of deleted function ‘std::atomic<bool>::atomic(const std::atomic<bool>&)
错误。
#include <iostream>
#include <atomic>
class Test
{
public:
Test()
{
}
virtual~Test()
{
}
private:
std::atomic<bool> m_IsInit = false;
};
int main()
{
Test test;
return 0;
}
首先这段代码在Visual Studio 2019上编译是没有错误的,但是在GCC7.5上出现了错误。
这个错误的字面意思是使用了删除的函数,原因是原子变量无法使用拷贝构造函数。上面出问题的代码
std::atomic<bool> m_IsInit = false;
主要是给原子变量初始化,这个代码等价于
std::atomic<bool> m_IsInit = std::atomic<bool>(false);
上述代码会先生成一个临时的std::atomic<bool>
对象,然后再用这个对象给m_IsInit
进行拷贝构造,隐式调用了拷贝构造函数,而原子变量是不能进行拷贝构造的,这在官方文档中也进行了说明,

相应链接:https://en.cppreference.com/w/cpp/atomic/atomic/operator%3D
这个限制只是在原子变量初始化时生效,初始之后时可以使用赋值操作符的,所以有多种解决方案去处理这个错误。
2 解决方案
2.1 在构造函数中赋值
将原子变量的赋值从初始化列表写到构造函数中即可,修改后的代码如下:
#include <iostream>
#include <atomic>
class Test
{
public:
Test()
{
m_IsInit = false;
}
virtual~Test()
{
}
private:
std::atomic<bool> m_IsInit;
};
int main()
{
Test test;
return 0;
}
2.2 直接初始化或使用初始化列表初始化
将代码行
std::atomic<bool> m_IsInit = false;
修改为
std::atomic<bool> m_IsInit{false}; // 方法1
std::atomic<bool> m_IsInit= {false}; // 方法2
当前分类随机文章推荐
- C++ - 最简单的将文本文件的内容一次性读取到std::string的方法 阅读4857次,点赞4次
- C++STL容器 – std::vector容器修改、元素操作总结 push_back,emplace_back,emplace,insert,erase,pop_back,clear,resize,swap 阅读1018次,点赞1次
- C++ - 使用std::chrono获取当前秒级/毫秒级/微秒级/纳秒级时间戳 阅读3498次,点赞0次
- C++ - Windows系统获取桌面路径 阅读186次,点赞0次
- C++ - 使用标准库实现事件和委托,信号和槽机制 阅读382次,点赞0次
- C++11 - std::string - stod/stof/stoi/stol/stold/stoll/stoul/stoull,由std::string转换为int/long/float/double等其他类型 阅读3517次,点赞0次
- C++11 - std::bind简要介绍以及可绑定函数的几种形式总结 阅读4669次,点赞4次
- C++ - websocket++库的可使用的所有事件总结 阅读199次,点赞0次
- C++11 - 使用std::thread::join()/std::thread::detach()方法需要注意的点 阅读2868次,点赞0次
- C++ - 函数返回多个返回值的方法总结 阅读1918次,点赞0次
全站随机文章推荐
- failed to find an available destination > EOF 阅读18261次,点赞32次
- WordPress - 利用Revolvermaps在首页实时显示访客3D地球 阅读3351次,点赞1次
- 计算机视觉顶会有哪些?计算机视觉顶会整理 阅读25次,点赞0次
- C++ - return this和return *this的含义和区别 阅读380次,点赞0次
- WordPress - WordPress后台登录设置验证码,防止恶意爆破网站 阅读3908次,点赞0次
- C++ - Windows/Linux跨平台获取本机CPU核心数 阅读216次,点赞0次
- FFmpeg - ./configure编译参数全部总结和整理 阅读1749次,点赞3次
- 资源分享 - OpenGL编程指南(原书第9版)- OpenGL红宝书高清带书签PDF下载 阅读13233次,点赞4次
- WordPress - 在后台管理面板添加禁止某一个用户登录的功能 阅读152次,点赞0次
- 资源分享 - Foundations of Physically Based Modeling and Animation 英文PDF下载 阅读3718次,点赞0次
评论
169