需要具有原子对象的数组作为其私有数据成员之一的类。
class A {
vector<atomic<int>> arr;
public:
A(int size, int init) : arr(vector<atomic<int>>(size,init)) {}
// Error: Deleted 'atomic(const atomic&)' (GCC)
};
相当简单,删除了复制构造函数。我想要做的就是将arr
中的每个条目初始化为init
。我能够使用指针和动态分配来做到这一点。
class A {
atomic<int> *arr;
public:
A(int size, int init) : arr(new atomic<int>[size]) {
for (int i=0; i<size; ++i) arr[i]=init; // Not initialization, but works
}
};
但我想用矢量(C++
ish way)来做这件事。我尝试明确指定向量元素,但即使vector::resize()
和vector::push_back()
也需要复制ctor。
class A {
vector<atomic<int>> arr;
public:
A(int size, int init) {
arr.resize(size); // Error: Deleted 'atomic(const atomic&)' (GCC)
for (int i=0; i<size; ++i) arr[i]=init;
}
};
有没有可能的黑客攻击或指针一是唯一的选择?
谢谢。
答案 0 :(得分:4)