我想以線程安全的方式爲名爲的訂單生成標識符。下面的代碼不能編譯。我知道原子類型沒有拷貝構造函數,我假設這解釋了爲什麼這個代碼不起作用。有沒有人知道一種方法來實際獲得這個代碼的工作?我還在學習,所以請讓我知道,如果我在錯誤的軌道上(如果是這樣,我會很感激,如果你能指點我一個替代方法)。謝謝!初始化靜態原子成員變量
#include <atomic>
#include <iostream>
class order {
public:
order() { id=c.fetch_add(1); }
int id;
private:
static std::atomic<int> c;
};
std::atomic<int> order::c = std::atomic<int>(0);
int main() {
order *o1 = new order();
order *o2 = new order();
std::cout << o1->id << std::endl; // Expect 0
std::cout << o2->id << std::endl; // Expect 1
}
編譯以下錯誤上述結果:
order.cpp:45:51: error: use of deleted function
‘std::atomic<int>::atomic(const std::atomic<int>&)’
In file included from order.cpp:3:0:
/usr/include/c++/4.7/atomic:594:7: error: declared here
非常感謝約阿希姆!我已經提出了你的答案,但我會接受邁克的,因爲它有點冗長。希望你不介意! ;) – Teisman