Vorrei generare identificatori per una classe denominata in ordine in modo thread-safe. Il codice seguente non viene compilato. So che i tipi atomici non hanno costruttori di copia e presumo che questo spieghi perché questo codice non funziona. Qualcuno conosce un modo per far funzionare questo codice? Sto ancora imparando, quindi per favore fatemi sapere se sono sulla strada sbagliata (se così fosse, sarei grato se poteste indicarmi un approccio alternativo). Grazie!Inizializza variabile membro atomico statico
#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
}
Compilare i risultati di cui sopra nel seguente errore:
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
Grazie mille Joachim! Ho svalutato la tua risposta, ma accetterò Mike perché è un po 'più prolisso. Spero non ti dispiaccia! ;) – Teisman