c++ - C+ + - 原子向量的初始化


void foo() {


 std::vector<std::atomic<int>> foo(10);


 ...


}



foo的内容现在有效? 或者我需要明确地循环并初始化它们?

所以我认为原子是零初始化的,所以问题是,std::atomic<int>的零初始化是否会导致有效对象?

时间:

你是正确的,根据标准,原子有默认的构造函数,但是它们没有被初始化,这是由于默认构造函数没有初始化原子:

默认初始化std::atomic<T>不包含T对象它唯一有效的用法是销毁和初始化std :: atomic_init

有很多规避此问题的方法,包括使用包装器:


struct int_atomic {


 std::atomic<int> atomic_{0};//use 'initializing' constructor


};



...