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>*> 类型的指针向量来达到类似的效果。

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

#include <iostream>
#include <vector>
#include <atomic>

int main() {
    std::vector<std::atomic<float>*> data;
    
    // 初始化原子变量,并将指针添加到向量中
    auto atomic1 = new std::atomic<float>(1.0f);
    data.push_back(atomic1);

    auto atomic2 = new std::atomic<float>(2.0f);
    data.push_back(atomic2);

    auto atomic3 = new std::atomic<float>(3.0f);
    data.push_back(atomic3);

    // 在不同线程中对原子变量进行操作
    std::thread t1([&]() {
        (*data[0]) += 10.0f;
    });

    std::thread t2([&]() {
        (*data[1]) *= 2.0f;
    });

    t1.join();
    t2.join();

    // 打印原子变量的值
    for (const auto& ptr : data) {
        std::cout << *ptr << " ";
        delete ptr; // 删除动态分配的原子变量对象
    }

	return 0;
}

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

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

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


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?