原子变量的向量(数组)

J. *_*Doe 1 c++ arrays vector atomic copy-constructor

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

#include <atomic>
#include <vector>

int main() {
    std::vector<std::atomic<int>> examp;
    examp.resize(64);
}
Run Code Online (Sandbox Code Playgroud)

Lui*_*man 5

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

#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';
}
Run Code Online (Sandbox Code Playgroud)