Supposed ho la seguente classe:Accesso non inizializzata variabile privata atomica in C++
class A
{
public:
...
...
void incrementN() {++n_;}
uint64_t getN() {return n_;}
private:
std::atomic<uint64_t> n_;
...
...
};
Si supponga che ho inizializzare tutte le altre variabili della classe, ad eccezione n_
e che questo non è thread storage locale, quindi non c'è nessuna inizializzazione zero.
Ho creato un oggetto di classe A e continuo a chiamare incrementN()
.
Se ad un certo punto che voglio il valore di n_
, e chiamo getN()
, possono causare questo la routine load()
per l'atomica n_
il crash?
Avete un costruttore di default 'A' o qualsiasi costruttore' A'? Se non si dispone di costruttori o di un costruttore predefinito ('A() = default;'), il costruttore predefinito generato dal compilatore chiamerà il costruttore predefinito di tutti i membri non statici ([riferimento] (http: // it .cppreference.com/w/cpp/language/default_constructor)), e il costruttore ['std :: atomic'] predefinito (http://en.cppreference.com/w/cpp/atomic/atomic/atomic) sarà chiamato. –
Sì, ho un costruttore per A e inizializza le altre variabili di A, ma non inizializza 'n_' – user1715122
@JoachimPileborg n_ è inizializzato di default, l'oggetto è costruito, il suo valore non è specificato, quindi non è UB. – Rost