Ho un class A
con una variabile membro _atomicVar
di tipo std::atomic<int>
.
errore C2280: tentativo di fare riferimento a una funzione cancellata (atomico <int>)
#include <atomic>
class A
{
public:
A();
~A();
private:
std::atomic<int> _atomicVar;
};
Se io costruisco il progetto ottengo il seguente errore:
error C2280: 'std::atomic<int>::atomic(const std::atomic<int> &)' : attempting to reference a deleted function
Sono principalmente uno sviluppatore C# in modo da non so ogni dettaglio del C++ (ancora). Non so dove io uso la copia c'tor di atomic<int>
.
Ho anche tentato di inizializzare _atomicVar
:
std::atomic<int> _atomicVar { 0 };
... ma che non ha funzionato.
Mi aspetto che _atomicVar
(senza inizializzazione esplicita) venga inizializzato con il valore predefinito per int
.
Puoi dirmi perché si verifica questo errore?
Sembra che tu stia utilizzando Visual Studio. Quale versione? Anche su quale riga di codice ottieni l'errore? –
È il tuo intero codice? Forse stai copiando oggetti 'A'? Forse usi un contenitore che richiede elementi 'CopyConstructible'? – zch
Semplicemente non definire il costruttore di copie è una ragione sufficiente per questo.Quando definisci i tipi, che contengono membri 'atomic', devi definire esplicitamente una semantica valida per tutte le operazioni implicite, che possono essere eseguite o inserite dal compilatore. –