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)
你不能有一个向量,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)