포인터 관련해서 프로그래머는 많은 이야기를 듣게 되듣이 예외 안전성에 있어 포인터는 참 안타까우면서 놀라운 존재로 보여진다. 이번 항목은 함수의 매개변수에 포인터를 넘기게 될 때 문제가 생길 수 있음을 지적한다. 질문 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..
More Exceptional C++ 검색 결과
이번 항목은 uncaught_exception() 함수가 무엇이고 어떻게 쓸수 있는지에 대한 이야기 이다. 1. std::uncaught_exception() 은 무슨 일을 하나? 2. 이 코드가 좋은가? 나쁜가? T::~T() { if( !std::uncaught_exception() ) { // ... 예외를 발생시킬 수 있는 코드... } else { // ... 예외를 발생시키지 않은 코드... } } 3. uncaught_exception()을 사용할 수 있는 다른 좋은 방법이 있나? 해설 1. std::uncaught_exception() 은 무슨 일을 하나? 현재 처리되지 않은 예외가 있는지를 알아낼 수 있는 함수이며, 처리되지 않은 예외가 있을 경우 true 를 리턴하고 예외가 없을 경우 ..
이번 항목은 생성자에서 어떻게 예외가 발생 될 수 있으며, 생성자에서 예외가 발생한것이 어떤 의미인지 살펴 보는 항목이다. 예제 코드 // 예제 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; }; 이..
최근댓글