vector::erase() 오류시 exception 상황에 예외 상황이라 별도 처리를 해줘야 한다.
기존 C++ 98 까지는 아래 방법으로 처리가 가능하다.
하지만 vs2010 이상 부터는 사용법이 까다로워 졌다.
일단 vector::erase()를 보자.
기존 C++ x98 에서는 vector::erase()의 구조이다.
크래쉬가 나기 전에 exception을 받아 예외 처리하면 되었다.
vs2010 이상 부터는 달라진 부분이다. noexcept라 예외 처리 없이 그냥 크래쉬.
미니 덤프를 남겨야 하는 프로젝트라면 매우 곤란한 상황이 된다.
크래쉬는 일어났으나 덤프가 남지 않는 상황이 되어 버릴 수 있는 것.
물론 사용할 수 있는 여지는 있다.
하지만...
예외 처리 설정
_CRT_SECURE_INVALID_PARAMETER()는 그대로 존재 하나 뭔가 달라졌다.
즉, Debug 시 별도 처리로 체크가 가능하나 Release로 빌드 시 별도 설정 방법이 달라진 것.
_CRT_SECURE_INVALID_PARAMETER()를 재정의 해서 써야 한다.
여기 설명을 보자면 중간 부분에
#define _CRT_SECURE_INVALID_PARAMETER yourself looks appealing but does not work unless you rebuild the CRT yourself. That's not exactly practical.
본인이 _CRT_SECURE_INVALID_PARAMETER를 프로젝트에 맞춰 작성하세요. 하지만 효율적이지는 않다는 걸 아시길.
한마디로 다 막으면 너희들 욕할 테니까 사용할 수 있게는 놔둘게.
근데 지원은 안할꺼야. 너네가 알아서 설정해서 만들어. 퍼포먼스는 떨어져도 책임 안짐. 이런 뉘앙스...
_ITERATOR_DEBUG_LEVEL을 2로 셋팅해야 하는 건 덤.
프로젝트 성능이 낮아 진다는 것이 문제점. 안정성이냐 성능이냐 갈림길이 생겨 버렸다.
그냥 STL 조심히 사용하자. (...)
'[ Programing ] > C++' 카테고리의 다른 글
IOCP 선언. (0) | 2020.06.03 |
---|---|
char - wchar_t 변환 (0) | 2020.04.07 |
C++ 현재 시간 구하기. (0) | 2019.12.04 |
random_shuffle 시드 사용. (0) | 2019.11.22 |
C++ 17 sum() 베리어딕 템플릿의 확장버전. (0) | 2018.04.17 |