항목 20에서 문제 해결에 있어 auto_ptr 을 사용하는게 도움이 될까? 란 것인데, 20항목의 해결 코드에서 봤듯이 그런것이다. 그러니 문제를 나열 하자. 문제 : 1 20-2 에 비해서 다음 코드가 더 나은 점은 무엇이며, 아직 남아 있는 예외 안전성이 있다면 설명하라 /// 예제 21-1 // // 헤더 파일 void f( std::auto_ptr a, std::auto_ptr b ); // 구현 파일 f( std::auto_ptr( new T1 ), std::auto_ptr( new T2 ) ); 문제 : 2 문제 1에 있는 예외 안전성을 잡을 수 있고, 다음과 같이 호출 될 수 있는 auto_ptr_new 를 작성하라 /// 예제 21-2 // // 헤더 파일 void f( std::auto..
책 정리/More Exceptional C++ 검색 결과
포인터 관련해서 프로그래머는 많은 이야기를 듣게 되듣이 예외 안전성에 있어 포인터는 참 안타까우면서 놀라운 존재로 보여진다. 이번 항목은 함수의 매개변수에 포인터를 넘기게 될 때 문제가 생길 수 있음을 지적한다. 질문 1. 다음의 예제에서 함ㅅ f,g,h와 구문 expr1 과 expr2가 계산되는 순서는 어떻게 되는가? 이때 expr 들은 한번만 실행되는 구조이다. /// 예제 20-1(a) // f( expr1, expr2); /// 예제 20-1(b) // f( g(expr1), h(expr2) ); 2. 이 코드의 예외 안전성 문제가 발생할 가능성이 있는가? /// 예제 20-2 // // 헤더파일 void f( T1*, T2* ); // 구현파일 f( new T1, new T2 ); 해설 질문 1..
이번 항목은 uncaught_exception() 함수가 무엇이고 어떻게 쓸수 있는지에 대한 이야기 이다. 1. std::uncaught_exception() 은 무슨 일을 하나? 2. 이 코드가 좋은가? 나쁜가? T::~T() { if( !std::uncaught_exception() ) { // ... 예외를 발생시킬 수 있는 코드... } else { // ... 예외를 발생시키지 않은 코드... } } 3. uncaught_exception()을 사용할 수 있는 다른 좋은 방법이 있나? 해설 1. std::uncaught_exception() 은 무슨 일을 하나? 현재 처리되지 않은 예외가 있는지를 알아낼 수 있는 함수이며, 처리되지 않은 예외가 있을 경우 true 를 리턴하고 예외가 없을 경우 ..
항목 17에서 객체의 생명주기와 예외의 관련성에 대해서 이야기 했다면, 이번 항목에서는 객체 생성자에서 발생된 예외는 어떻게 진행되며, 어떻게 처리 해야 좋을 지에 대한 고민을 하는 항목이다. 질문 1. 항목 17의 예제 1에서 A나 B의 생성자가 예외를 발생시키면 C의 생성자가 그 예외를 흡수해서 예외를 아예 발생하지 않게 하는 것이 가능한가? 예와 함께 왜 이런 식으로 되었는지에 대한 근거를 제시하라. 질문 2. C의 생성자(들)에 안전하게 빈 throw 정의를 넣을 수 있도록 A와 B가 지켜야 하는 최소한의 요건은 무엇인가? 해설 질문 1. 해당 질문에 답하기 위해선 표준 예외 발생에 대한 규정을 알고 있어야 할 듯 싶어, 책에서 몇가지 규칙을 설명해 준다. 1. 핸들러가 단순히 'return;' ..
이번 항목은 생성자에서 어떻게 예외가 발생 될 수 있으며, 생성자에서 예외가 발생한것이 어떤 의미인지 살펴 보는 항목이다. 예제 코드 // 예제 1 class C : private A { B b; }; // 예제 2 { C c; } 질문 1. 예제 1에서 생성자에서 예외가 발생하면 어떻게 잡을 수 있을까? 질문 2. 예제 2에서 객체의 수명을 설명 할 수 있는가? 해설 1. 예외 발생 어떻게 잡을 수 있는가? 질문에 대해서만 답하자면, 예외를 잡기 위해서 try catch 문을 사용 해야 할것이다. 코드로 옮기자면, // 예제 1 class C : private A { public: ~C() { } C() try : A() , b() { } catch( ... ) { } private: B b; }; 이..
최근댓글