나는 예외를 던지기위한 모든 요구에 대해 std::exception
의 서브 클래스를 작성해야한다고 확신합니다. 이제 what
메서드를 재정의하는 방법을 살펴 보겠습니다.std :: exception의`what`에서 동적 문자열을 반환하십시오.
내가 직면하고있는 상황은 what
문자열이 동적으로 반환되면 매우 편리 할 것입니다. 일부 코드 조각은 예를 들어 XML 파일을 구문 분석하고 위치 또는 행 번호를 오류 메시지에 추가하면 유용합니다.
나는 Boost Exception handling guidelines을 따르려고합니다. 내가 좋아하는 것 무엇
은 알고 :
what
는 포수가 문자열을 해제하지 않을 가능성이 암시const char *
을 반환합니다. 그래서 결과를 저장하기 위해 다른 장소가 필요합니다.하지만 그 위치는 어디입니까? (thread-safety가 필요합니다.)what
도throw()
의 서명이 포함되어 있습니다. 내what
이 던지는 것을 막을 수는 있지만,이 방법은 너무 동적 인 것은 아닙니다.what
이 올바른 장소가 아니면 대신이 위치를 어디에서해야합니까? 내가 지금까지 들어 왔 답변에서
std::runtime_error
이 그렇게하기 때문입니다.
C- 문자열을 사용하는 경우에도 정적으로 크기가 조정 된 버퍼를 사용해야하거나 메모리 관리가 실패 할 수도 있습니다. (이것이 실제로 실제로 std::string
의 복사 생성자에서 잘못 될 수있는 유일한 것인지 궁금합니다. 즉, 동적으로 할당 된 C 문자열을 사용하지 못하게 될 것입니다.)
다른 옵션이 있습니까? 왼쪽?
부스트 가이드 라인 포인트가 추가되어 부적절한 경우 다시 편집하십시오. –