Ich möchte Bezeichner für eine Klasse mit dem Namen Bestellung in einer threadsafe Weise generieren. Der folgende Code wird nicht kompiliert. Ich weiß, dass die atomaren Typen keine Kopierkonstruktoren haben, und ich nehme an, das erklärt, warum dieser Code nicht funktioniert. Kennt jemand einen Weg, diesen Code tatsächlich zum Laufen zu bringen? Ich lerne immer noch, also lass es mich auch wissen, wenn ich auf dem Holzweg bin (wenn es so wäre, würde ich es begrüßen, wenn du mich auf einen alternativen Ansatz hinweisen könntest). Vielen Dank!Initialize statische atomare Elementvariable
#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
}
die obigen Ergebnisse in den folgenden Fehlern Kompilieren:
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
Vielen Dank Joachim! Ich habe deine Antwort aufgefrischt, aber ich werde Mike's akzeptieren, da es ein bisschen wortreicher ist. Ich hoffe, es macht Ihnen nichts aus! ;) – Teisman