認爲我有下面的類:在C++中訪問未初始化的原子私有變量
class A
{
public:
...
...
void incrementN() {++n_;}
uint64_t getN() {return n_;}
private:
std::atomic<uint64_t> n_;
...
...
};
假設我初始化類中的所有其他變量,除了n_
並且這不是線程本地存儲,所以沒有零初始化。
我創建了一個類A的對象,並且一直呼叫incrementN()
。
如果在某些時候,我想的n_
的價值,我打電話getN()
,可這導致load()
例程原子n_
崩潰?
你有一個'A'的默認構造函數,或者任何'A'構造函數嗎?如果你沒有任何構造函數或缺省構造函數('A()= default;'),那麼編譯器生成的默認構造函數將調用所有非靜態成員的默認構造函數([reference](http:// en .cppreference.com/w/cpp/language/default_constructor))和['std :: atomic'默認構造函數](http://en.cppreference.com/w/cpp/atomic/atomic/atomic)將會調用。 – 2014-12-02 08:29:39
是的,我有一個A的構造函數,它初始化A的其他變量但不初始化'n_' – user1715122 2014-12-02 08:33:07
@JoachimPileborg n_是默認初始化的,對象被構造,它的值是未指定的,所以它不是UB。 – Rost 2014-12-02 08:46:46