항목 20에서 문제 해결에 있어 auto_ptr 을 사용하는게 도움이 될까? 란 것인데, 20항목의 해결 코드에서 봤듯이 그런것이다.
그러니 문제를 나열 하자.
문제 : 1
20-2 에 비해서 다음 코드가 더 나은 점은 무엇이며, 아직 남아 있는 예외 안전성이 있다면 설명하라
그러니 문제를 나열 하자.
문제 : 1
20-2 에 비해서 다음 코드가 더 나은 점은 무엇이며, 아직 남아 있는 예외 안전성이 있다면 설명하라
문제 : 2
문제 1에 있는 예외 안전성을 잡을 수 있고, 다음과 같이 호출 될 수 있는 auto_ptr_new 를 작성하라
해설
문제 : 1
20-2에 문제에 비해서 좀 나아진 사용법으로 사용되지만 여전히 문제가 남아 있다. 바로 테스트 코드를 제공한다. 테스트 코드 작성이 필수인 책이다 보니, ... 작성해 봤다.
눈치 빠른 사람이 벌서 알수 있듯이, TA 와 TB의 생성자 호출이 먼저 되고 test_ptr이 먼저 될 것이다(물론 MSVC2005 기준) 이것으로 예외에 안전하지 못하다는 것을 알게 된다. 즉, 메모리 할당이 먼저 되고 test_ptr 에 넘길 수 있는 문제점을 가지고 있다는 것이다. 결국 20-2 에서 겪은 문제점이 해결되지 못했다.
이 문제의 해결법은 20-2의 해결법에 나타낸 것을 사용 해야 할 것이다.
문제 : 2
역시 문제 1의 해결 방법이 제일 좋으니, 생략 한다. 그러기 위해서 테스트 코드를 제공한 것이다.
총평
수 많은 책들에서 설명되고 있는 논의(?) 였으므로, 쉽게 접할수 있는 내용이다. 쉽게 풀이 하자면, 호출될 함수 위쪽에 하나씩 문장형태로 만들고, 그 결과물을 함수에 넘김으로써 깔끔하게 해결 할 수 있음이다~
이것은 모든 컴파일러마다 꼭 지키는 규칙이기 때문에, 어떠한 상황에서도 믿을 만한 코드이다.
'책 정리 > More Exceptional C++' 카테고리의 다른 글
항목 39 : 네임스페스 Part 1 : using 선언과 using 지시자 (난이도 : 2) (1) | 2008.12.08 |
---|---|
항목 38 : typedef (난이도 : 3) (0) | 2008.12.08 |
항목 37 : 전방 선언(forward dclarations) (난이도 : 3) (0) | 2008.12.08 |
항목 36 : 초기화 (변수 초기화, 생성자의 문제점) (난이도 : 3) (0) | 2008.12.07 |
항목 23 : 예외 안전 클래스 설계 Part 2 : 상속 (난이도 : 6) (0) | 2008.12.06 |
항목 22 : 예외 안전 클래스 설계 Part 1 : 복사 지정 연산(copy assignment) (난이도 7) (0) | 2008.12.06 |
항목 20 : 관리되지 않은 포인터 문제 Part 1: 매개변수 (난이도 6) (0) | 2008.12.06 |
항목 19 : 처리되지 않은 예외 (0) | 2008.12.04 |
항목 18 : 생성자 실패 Part2 : 흡수? (0) | 2008.12.03 |
항목 17 : 생성자 실패 Part 1 : 객체의 수명 (난이도 : 4) (0) | 2008.12.02 |
최근댓글