티스토리 뷰

 이전 포스트에서는 auto 를 써야하는 이유를 보았다면 이번 글에서는 auto 를 사용할 때, 주의해야하는 점을 알아보도록 하자. 

std::vector<bool>::reference

 vector<bool>::reference 가 무엇인지 아는 사람은 드물것이다. 먼저 vector<bool> 에 대해 생각해보자. bool 형식을 원소로 갖는 배열을 의미한다. 여기서 bool 의 특징을 생각해보자. bool true, false 만 저장하는데도 속도를 위해 1byte 의 크기를 갖고 있다. 그런데 우리는 bool 배열을 사용할 것이기 때문에 굳이 1byte만 사용하지 않아도 된다. 1bit에 1개의 원소를 저장해도 아무런 문제가 없다. 이를 bool 처럼 사용하게 해주는 컨테이너가 바로 vector<bool>::reference 이다. 여기서 auto 를 사용하면 어떻게 될까?

vector<bool> bools;

...

bool highPriority = bools[5];

auto highPriority = bools[5];

 bool 일 때와 auto 일 때의 결과는 완전히 다르다. bool 일 때는 형식 연역이 일어나지만 auto vector<bool>::reference 가 된다. 그런데 여기서 만약 bools 가 소멸된다면 문제가 발생한다. bool 로 선언했다면 값은 복사되어 아무런 문제가 없지만 auto 의 경우 원본이 사라져서 dagling pointer 가 되버리고 만다. 이는 큰 문제가 될 수 있다. 이를 어떻게 해결 할 수 있을까?

static_cast

 위의 문제를 해결하는 것이 바로 타입 캐스팅이다. 그 중에서도 static_cast를 이용하면 위와 같은 문제를 미연에 방지할 수 있다.

auto highPriority = static_cast<bool>(bools[5]);

이제 highPriority는 bool 타입이 되어 위와 같은 문제를 회피 할 수 있다.

 

참고 서적

스콧 마이어스, Effective Modern C++

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함