我知道 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/