0
需要一個類,它有一個數組作爲其私有數據成員之一。atomic - Deleted Copy構造函數
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++
雜交方式)。我嘗試明確分配向量元素,但即使vector::resize()
和vector::push_back()
也需要一個拷貝。
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(大小,INIT)'? – SergeyA
['emplace_back'](http://en.cppreference.com/w/cpp/container/vector/emplace_back)構建了適當的項目。不幸的是,由於潛在的需要重新分配,它還需要T是MoveInsertable,這是原子不能滿足的。 – jaggedSpire