2013-06-25 1 views
3

짧은 버전 : "C++ 표준, 17.6.4.10 [res.on.exception.handling]에서 설명한 예외"란 무엇이며 어떻게 잡을 수 있습니까?C++ 표준, 17.6.4.10 [res.on.exception.handling]에 설명 된대로 예외를 catch하는 방법은 무엇입니까?

롱 버전 ... 내가 인수로 system::error_code을지지 않습니다 boost::create_directories()의 버전에서 던진 예외를 잡을 싶습니다

. Boost Filesystem Error Reporting Documentation는 말한다 create_directories() 보고서 오류 중 하나에 의해 ... 던지는

을>은 boost::filesystem_error 때 사양을 충족하거나에서 기능을 방지하는 오류 운영 체제 또는 다른 기본 API 결과에 구현하여 전화를 겁니다. ..

b> 저장소를 할당하지 못한 경우 C++ 표준, 17.6.4.10 [res.on.exception.handling]에 설명 된 예외가 throw됩니다.

첫 번째 사례는 분명하며 그 상황을 처리했습니다. 하지만 두 번째 사건을 어떻게 처리해야하는지에 대한 설명은 찾을 수 없습니다. C++ 표준, 17.6.4.10 res.on.exception.handling "에 설명 된 것처럼 인터넷 검색은 3 개의 기사 (0이 아닌 검색 결과에 대한 레코드가 될 수 있음)를 생성하며, 그 중 아무 것도 그와 같은 예외.

아무도 도와 줄 수 있습니까?

답변

3

그들이 의미하는 바는 (간접적으로) std::bad_alloc을 던질 것이라고 생각합니다. 메모리를 다 써 버린 프로그램이 어떤 경우에도 계속되지 않을 수도 있기 때문에 실제로 그것을 잡으려고하지 않을 수도 있습니다. 여러분에게 달려 있습니다 - 저는 다른 요일에도이 동일한 문서를 읽었으며 결론은 제가 온 것입니다.

+0

"스토리지 할당 실패"는 메모리를 의미합니까? 필자는 디스크 공간 (파일 시스템 호출)을 의미한다고 생각했습니다. –

+2

나는 그들이 기억을 의미한다고 생각합니다. 파일 관련 오류는 첫 번째 경우에 설명 된대로 사용자 정의 예외 클래스의 (자손)을 던져야합니다. 혼란스러운 말씨, 사실. –

1

예외 처리에 관한 현재 C++ 11 표준의 실제 단락은 §17.6.5.12입니다. 그러나 boos 라이브러리가 무엇을 던질 지에 대한 유용한 정보는 없습니다. "스토리지를 할당 오류가있는 경우 예외를 throw [...]"

내가 당신이 원하는 것은 측면에서 가능성이 가장 높은 경우 이후 std::exception을 잡으려고 생각 std::exception에서 파생되는 std::bad_alloc이다.

0

boost::filesystem 설명서를 읽는 동안 같은 질문이 생겼습니다. C++ 14 표준의 n4296 초안에서 선언 된 다음

  1. 표준 라이브러리 ++은 C에 정의 된 기능 중 하나가 오류를보고 할 수있는 예외 처리에

    17.6.5.12 제한 예외를 던져 그것의 던지기에서 기술 된 유형의 : 단락. 구현은 비 던진 noexcept-specification을 추가하여 비 가상 함수에 대한 예외 사양을 강화할 수 있습니다.

  2. 함수는 유형이 Throws 절에 명명 된 유형에서 파생되고 기본 유형에 대한 예외 처리기에 의해 포착 된 경우 Throws 절에 나열되지 않은 유형의 객체를 throw 할 수 있습니다.

이 정보 소리가 나지 않는다, 따라서 실제 대답은 현재 Github에서 호스팅되는 부스트 소스에서 발견 될 필요가있다. 실제로, 정의 된 구현에서는 ec 인수가 제공되지 않으면 boost::filesystem::filesystem_error 예외가 발생합니다.

if (ec == 0) 
    BOOST_FILESYSTEM_THROW(filesystem_error(
    "boost::filesystem::create_directories", parent, local_ec)); 
관련 문제