认为我有下面的类:在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