항목 20에서 문제 해결에 있어 auto_ptr 을 사용하는게 도움이 될까? 란 것인데, 20항목의 해결 코드에서 봤듯이 그런것이다.

그러니 문제를 나열 하자.

문제 : 1
20-2 에 비해서 다음 코드가 더 나은 점은 무엇이며, 아직 남아 있는 예외 안전성이 있다면 설명하라


문제 : 2

문제 1에 있는 예외 안전성을 잡을 수 있고, 다음과 같이 호출 될 수 있는 auto_ptr_new 를 작성하라


해설

문제 : 1

20-2에 문제에 비해서 좀 나아진 사용법으로 사용되지만 여전히 문제가 남아 있다. 바로 테스트 코드를 제공한다. 테스트 코드 작성이 필수인 책이다 보니, ... 작성해 봤다.

눈치 빠른 사람이 벌서 알수 있듯이, TA 와 TB의 생성자 호출이 먼저 되고 test_ptr이 먼저 될 것이다(물론 MSVC2005 기준) 이것으로 예외에 안전하지 못하다는 것을 알게 된다. 즉, 메모리 할당이 먼저 되고 test_ptr 에 넘길 수 있는 문제점을 가지고 있다는 것이다. 결국 20-2 에서 겪은 문제점이 해결되지 못했다.

이 문제의 해결법은 20-2의 해결법에 나타낸 것을 사용 해야 할 것이다.

문제 : 2

역시 문제 1의 해결 방법이 제일 좋으니, 생략 한다. 그러기 위해서 테스트 코드를 제공한 것이다.


총평

수 많은 책들에서 설명되고 있는 논의(?) 였으므로, 쉽게 접할수 있는 내용이다. 쉽게 풀이 하자면, 호출될 함수 위쪽에 하나씩 문장형태로 만들고, 그 결과물을 함수에 넘김으로써 깔끔하게 해결 할 수 있음이다~

이것은 모든 컴파일러마다 꼭 지키는 규칙이기 때문에, 어떠한 상황에서도 믿을 만한 코드이다.



posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요