ZBLOG

error: use of deleted function ‘std::atomic::atomic(const std::atomic&) [with _Tp = float]’ 145 | noexcept(noexcept(::new((void *)__p) | ^~~~~~~~~~~~~~~~~~ 146 | _Up(std::forward(__args)...)))

抱歉,我之前的回答有误。std::atomic 不支持复制构造函数,因此不能直接将其放入 std::vector 中。相反,你可以使用 std::vector<std::atomic<float>*> 类型的指针向量来达到类似的效果。

以下是一个修正后的示例代码:

  1. #include <iostream>
  2. #include <vector>
  3. #include <atomic>
  4. int main() {
  5. std::vector<std::atomic<float>*> data;
  6. // 初始化原子变量,并将指针添加到向量中
  7. auto atomic1 = new std::atomic<float>(1.0f);
  8. data.push_back(atomic1);
  9. auto atomic2 = new std::atomic<float>(2.0f);
  10. data.push_back(atomic2);
  11. auto atomic3 = new std::atomic<float>(3.0f);
  12. data.push_back(atomic3);
  13. // 在不同线程中对原子变量进行操作
  14. std::thread t1([&]() {
  15. (*data[0]) += 10.0f;
  16. });
  17. std::thread t2([&]() {
  18. (*data[1]) *= 2.0f;
  19. });
  20. t1.join();
  21. t2.join();
  22. // 打印原子变量的值
  23. for (const auto& ptr : data) {
  24. std::cout << *ptr << " ";
  25. delete ptr; // 删除动态分配的原子变量对象
  26. }
  27. return 0;
  28. }

在上述代码中,我们使用了 std::vector<std::atomic<float>*> 来存储指向 std::atomic<float> 对象的指针。然后,我们在每个指针上执行相应的操作。

最后,我们遍历指针向量并打印原子变量的值。请注意,在使用完毕后需要手动删除动态分配的原子变量对象。

非常抱歉给你带来困惑,并感谢你的纠正。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=15842

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?