, C# 및 C++에서 아무도 new
연산자에 예외 처리를 사용하지 않습니다. 그 이유는 무엇입니까? 전화가 항상 성공할 것이라고 보장됩니까?새 작업을 사용할 때 try catch를 추가하지 않는 이유
답변
통화가 항상 성공적으로 이루어 지도록 보장됩니까?
아니요, 이것은 보장 할 수 없습니다.
일반적으로 실제로 뭔가 할 수있는 예외를 처리하는 것은 좋은 생각입니다. 규범에 따라, 예외를 최소화 할 수있는 방법으로 개체 구성을 설계하는 것이 좋습니다. 즉, 항상 가능한 것은 아니며 대부분의 경우 new Foo()
을 호출하면 쉽게 catch 할 수있는 예외가 발생할 수 있습니다. 이 작업을 수행하려고하면
예를 들어,이 이상 (심지어 gcAllowVeryLargeObjects
세트) 단일 차원의 배열에 허용되는 최대 항목 수보다 같이 예외를 발생 보장하고 있습니다 :
var willCauseException = new double[int.MaxValue];
주요 언어가 코드가 가능한 해결할 수없는 예외를 처리하는 관용구를 제공하지 않는다는 것은 너무 나쁘다. 잡아라. 그리고 rethrow 다소 일종의 일하지만, 그것은 칙칙한. 예외를 해결할 수있는 코드를 위해'catch '를 예약 할 수 있다면 더 좋을 것입니다. 그리고 다른 블록 타입 (e.e.예외를 해석 할 수 없지만 그것을 바탕으로 행동을 취해야한다는 것을 알고있는 코드에 대해'fault (Exception ex)'또는'finally (Exception ex)'를 사용할 수 있습니다. – supercat
글쎄, 아무도은 강한 표현입니다. 사실, 산업 수준의 응용 프로그램은 이러한 오류를 확인해야합니다. 그러나 이것이 오류가 검사되어야 함을 의미하지는 않습니다. 모든 곳.
new
을 사용하여 개체를 만들려고하면 생성자 자체에서 발생할 수있는 메모리 외에도 std::bad_alloc
또는 OutOfMemoryException
(사용자 언어에 따라 다름)을 발생시킬 수 있습니다. 하지만이 예외를 발견하면 어떻게해야할까요? 할 일은 중앙 집중식 장소 (아마도 응용 프로그램의 메인 루프)에서 이러한 예외를 잡아서 거기에서 처리하는 것입니다. "메모리가 부족합니다. 현재 작업을 저장하고 응용 프로그램을 종료하십시오"라는 메시지 중 하나가 나타날 때마다 이러한 예외 중 하나가 발견되어 처리됩니다 (일반적으로 응급 상황을 해제하여 정상적인 종료를 허용 한 후 사용자에게 경고하는 메모리 블록).
예외 관리는 모든 곳에서 try-catch
블록을 작성하는 것으로 구성되지 않습니다. 올바른 위치에만 존재해야하며 나머지 코드는 예외가 발생할 수 있고 시스템 상태가 항상 복구 가능한 상태로 유지되어야한다는 점을 고려하여 작성되어야합니다.
- 1. PHP 웹 애플리케이션 try/catch를 사용할 때
- 2. NSError 테스트 대신 Try/Catch를 사용하는 이유
- 3. Try/catch에 대해 Perl이 에러를 발생시키지 않는 이유 Try :: Tiny
- 4. 언제 JavaScript에서 try/catch를 사용해야합니까?
- 5. android에서 try and catch를 사용할 때 루프가 작동하지 않습니다.
- 6. Try/Catch를 사용할 때 Java가 무한 루프에 걸림
- 7. 맵에 try catch를 사용할 때 현재 반복 값을 얻는 방법
- 8. Erlang에서 try catch를 사용할 수있을 때 수퍼바이저를 사용해야하는 이유는 무엇입니까?
- 9. PHP는 try catch를 포함합니다.
- 10. 속성 내에서 try-catch를 사용합니까?
- 11. try catch를 제거하는 방법은 무엇입니까?
- 12. try catch를 사용하여 DataServiceRequestException에서 복구
- 13. try/catch를 사용한 return 문
- 14. TortoiseHg가 packages.config를 추가하지 않는 이유
- 15. ()/Try-Catch를 사용하여 저장 /로드하기
- 16. Java에서 try-catch를 사용하는 방법?
- 17. try catch를 사용하는 n-layer
- 18. 두 개의 try-catch를 사용합니까?
- 19. Swift에서 try-catch를 사용하는 방법?
- 20. 왜이 시나리오에서는 try/catch를 사용하지 않는 것이 좋습니까?
- 21. TRY-CATCH를 포함한 크래시시 원치 않는 프로그램 종료 방지
- 22. try catch 내부에서 try catch를 수행하는 가장 좋은 방법은 무엇입니까?
- 23. while 루프가 try-catch를 무시하는 동안
- 24. Powershell : try and catch를 사용한 오류 처리
- 25. Try and Catch를 사용하여 과거의 오류 이동
- 26. NSManagedObjectContext 주위에 try-catch를 저장하면 도움이됩니까?
- 27. 마침내 try/catch를 사용하는 것이 좋습니다?
- 28. try/catch를 dataContext와 함께 사용할 위치는 어디입니까? (Dispose)
- 29. 컨트롤러에서 try ... catch를 사용하지 않으려면 어떻게해야합니까?
- 30. try catch를 추가하고 일반 클래스로 함수를 변환하십시오.
메모리 부족 예외를 생성 할 수 없습니다? 성공을 보장하지 않습니다. 나는 변수가 값을 할당 받았는지 아니면 여전히 NULL인지 테스트가 믿는다. –
'OutOfMemoryException'을 던질 수는 있지만 다루는 것은 어렵습니다. 그래서 저는 그것을 최상위 레벨 처리자에게 남겨두고기도합니다. – CodesInChaos
그래서 예외가 호출을 실패한 것을 잡기 위해 더 높은 레벨로 버블 링을 유지하거나 체인을 처리하지 않으면 치명적인 오류가됩니다. –