나는 이런 수업을 가지고있다 :
struct event_counts {
uint64_t counts[MAX_COUNTERS];
event_counts() : counts{} {}
// more stuff
};
일반적 counts
으로 그림과 같이 배열 을 기본값으로 초기화하려고합니다 .
그러나 프로파일 링으로 식별 된 선택된 위치에서 배열을 덮어 쓰려고한다는 것을 알고 있기 때문에 배열 초기화를 억제하고 싶지만 컴파일러는 그것을 알아낼만큼 똑똑하지 않습니다.
그러한 "2 차"제로 아거 생성자를 만드는 관용적이고 효율적인 방법은 무엇입니까?
현재 저는 uninit_tag
더미 인수로 전달되는 태그 클래스 를 사용하고 있습니다 .
struct uninit_tag{};
struct event_counts {
uint64_t counts[MAX_COUNTERS];
event_counts() : counts{} {}
event_counts(uninit_tag) {}
// more stuff
};
그런 다음 생성 event_counts c(uninit_tag{});
을 억제하고 싶을 때 와 같이 no-init 생성자를 호출합니다 .
나는 더미 클래스의 생성을 포함하지 않거나 어떤 식 으로든 더 효율적인 솔루션에 개방적입니다.