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
'IT' 카테고리의 다른 글
EF 6 및 Code First 마이그레이션의 동일한 DB 및 애플리케이션에있는 여러 DB 다수 (0) | 2020.09.03 |
---|---|
끔찍한 이벤트 리스너를 파괴하지 않고 innerHTML에 추가 할 수 있습니까? (0) | 2020.09.03 |
node.js postgresql 모듈을 사용하는 적절한 방법은 무엇입니까? (0) | 2020.09.03 |
벡터를 0으로 초기화 C ++ / C ++ 11 (0) | 2020.09.03 |
jquery에서 첫 번째 수준 요소 만 선택 (0) | 2020.09.03 |