치다:
void foo() {
std::vector<std::atomic<int>> foo(10);
...
}
foo의 내용이 이제 유효합니까? 아니면 명시 적으로 반복하고 초기화해야합니까? 나는 Godbolt를 확인했는데 괜찮아 보이지만이 시점에서 표준이 매우 혼란스러워 보입니다.
표준 : : 벡터 생성자는 삽입 말한다 기본 삽입 의 인스턴스 std::atomic<int>
이며, 초기화 값 배치를 통해를 new
.
가치 초기화의이 효과가 적용된다고 생각합니다.
2) T가 사용자 제공 또는 삭제되지 않은 기본 생성자를 가진 클래스 유형 인 경우 (즉, 암시 적으로 정의되거나 기본 기본 생성자를 가진 클래스 일 수 있음), 객체는 0으로 초기화 된 다음 사소한 기본 생성자가 있으면 기본값으로 초기화됩니다.
그래서 원자는 0으로 초기화 된 것 같습니다. 문제는, std::atomic<int>
결과를 0으로 초기화 하면 유효한 객체가됩니까?
나는 대답이 "실제로 그렇지만 실제로 정의되어 있지는 않다"고 추측 할 것입니다.
참고 : 이 답변 은 0으로 초기화되었음을 동의하지만 객체가 유효하다는 것을 실제로 말하지는 않습니다.
atomic_init
. 어쨌든 질문의 코드 주위를 이미 동기화해야합니다.