c++ - 原子变量的 vector (数组)

标签 c++ arrays vector atomic copy-constructor

我知道 atomic 有一个被删除的复制构造函数,但我该怎么做才能使这段代码正常工作?我怎么可能在 vector 中为原子定义一个复制构造函数?

#include <atomic>
#include <vector>

int main() {
    std::vector<std::atomic<int>> examp;
    examp.resize(64);
}

最佳答案

你不能有 std::atomic<int> 的 vector 因为它不可复制或移动,但你可以有一个 unique_ptr vector 到 atomic<int> .如果你真的需要一个运行时可变大小的原子 vector ,这可能是一个可行的选择。这是一个例子:

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

using namespace std;

int main() {
    std::vector<std::unique_ptr<std::atomic<int>>> examp;
    examp.resize(64);   // 64 default unique_ptrs; they point to nothing

    // init the vector with unique_ptrs that actually point to atomics
    for (auto& p : examp) {
        p = std::make_unique<std::atomic<int>>(0);   // init atomic ints to 0
    }

    // use it
    *examp[3] = 5;

    for (auto& p : examp) {
        cout << *p << ' ';
    }
    cout << '\n';
}

关于c++ - 原子变量的 vector (数组),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47986552/

相关文章:

c++ - Eigen,如何访问 MatrixBase<Derived> 的底层数组

c++ - 如何找出从哪里加载程序数据?

c++ - 在结构中设置数组的值

c++ - 从字符串中提取 x、y、z 坐标?

c++ - 使用 OpenGL 或 D3D 绘制椭圆的有效方法

c++ - 链接到下载的软件包时出现许多LD链接错误

c++ - 模板(去)激活成员变量

javascript - 如何将数组 [] 转换为一系列 { key : value } paired objects?

c# - 将项目部分复制到列表的最佳方法?

java - 在java中将两个整数数组组合成一个数组