【发布时间】:2016-10-06 18:36:37
【问题描述】:
需要一个具有原子对象的数组 作为其私有数据成员之一的类。
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 方式)。我尝试显式分配给向量元素,但即使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;
}
};
是否有任何破解方法或指针是唯一的选择?
谢谢。
【问题讨论】:
-
为什么不
arr(size, init)? -
emplace_back就地构造项目。不幸的是,由于可能需要重新分配,它还要求 T 是 MoveInsertable,而原子不能满足这些要求。