Ich habe eine class A
mit einer Elementvariable _atomicVar
des Typs std::atomic<int>
.
Fehler C2280: versucht, eine gelöschte Funktion (atomare <int>)
#include <atomic>
class A
{
public:
A();
~A();
private:
std::atomic<int> _atomicVar;
};
Wenn ich das Projekt, das ich die folgende Fehlermeldung erhalten bauen:
error C2280: 'std::atomic<int>::atomic(const std::atomic<int> &)' : attempting to reference a deleted function
Ich bin in erster Linie ein C# -Entwickler, so weiß ich nicht jedes Detail von C++ (noch) nicht. Ich weiß nicht, wo ich die Kopie c'tor von atomic<int>
verwende.
Ich habe auch versucht _atomicVar
zu initialisieren:
std::atomic<int> _atomicVar { 0 };
... aber das hat nicht funktioniert.
Ich würde erwarten, dass _atomicVar
(ohne eine explizite Initialisierung) mit dem Standardwert für int
initialisiert werden würde.
Können Sie mir sagen, warum dieser Fehler auftritt?
Sie scheinen Visual Studio zu verwenden. Welche Version? Auch auf welcher Codezeile erhalten Sie den Fehler? –
Ist es Ihr gesamter Code? Vielleicht kopierst du 'A' Objekte? Vielleicht verwenden Sie einen Container, der 'CopyConstructible' Elemente benötigt? – zch
Einfach den Kopierkonstruktor nicht zu definieren ist genug Grund dafür.Wenn Sie Typen definieren, die atomare Elemente enthalten, müssen Sie explizit gültige Semantik für alle impliziten Operationen definieren, die vom Compiler ausgeführt oder eingefügt werden können. –