IT

C ++ catch 블록-값 또는 참조로 발생합니까?

lottoking 2020. 9. 3. 20:21
반응형

C ++ catch 블록-값 또는 참조로 발생합니까? [복제]


가능성 :
C ++에서 포인터로 예외 발생

나는 항상 가치가 있습니다. 예 :

try{
...
}
catch(CustomException e){
...
}

그러나 대신에 발견 코드를 발견 catch(CustomException &e)했습니다. 이것은 a) 좋은 b) 틀린 c) 회색 영역입니까?


C ++의 예외에 대한 표준 관행은 ...

값으로, 참조로 잡기

값을 기준으로 잡는 상속 계층 구조에서 문제가 발생합니다. 예를 들어 오류 코드와 같은 항목 MyException을 상속 CustomException하고 재정의 하는 다른 유형이 가정 합니다. 경우 MyException유형 던져진 당신의 블록은 그것으로 CHAPTER 2 원인이 잡을 CustomException오류 코드가 변경 야기 인스턴스입니다.


으로 캐치 값 하면 예외가 캐치하는 유형에, 대한 파생 유형 인 경우 예외 개체 슬라이스 됩니다 .

const 참조로 catch하지 않을 이유는 거의 없습니다.

throw;블록에 매개 변수가없는 잡을 경우 슬라이스 된 복사본 또는 예외 object-에, 대한 참조를 포착했는지 여부에 관계없이 원래 예외가 다시 발생합니다.


예외를 처리하고 싶지 않다면 일반적으로 참조를 참조합니다 catch (const CustomException& e) { ... }. 컴파일러는 졸업생의 수명을 다룹니다.


(CustomException e)그것의 생성자를 호출 할 수 있도록 CustomException의 새 개체 ... 생성되는 반면 (CustomException & E) 그 것이다 단지 참조 ... 생성자가 호출되지 않습니다없는 새로운 오브젝트 가 작성되고 ... 그래서 공식은 약간의 오버 헤드 ... 나중에 사용하는 것이 좋습니다 ...

참고 URL : https://stackoverflow.com/questions/2522299/c-catch-blocks-catch-exception-by-value-or-reference

반응형