예외 안전성을 추구할 가치가 있는가? 어떻게 이런 질문을 할 수 있을까 한다. "추구할 가치가 있는가?" .. 나는 단연코 추구할 가치가 있다고 생각한다. 여러가지가 있지만, 에러가 한번 터졌다 하면, 어디서 부터 봐야 하는지 난감할 때, 이 때문에 나는 단연코 추구해야 한다고 생각한다. 어느정도 알고 있을 때의 코딩과 그냥 막무가네로 찾아야 하는 코딩은 분명 차이가 있기 때문이다. 이번 항목은 "추구할 가치가 있는가?" 로 생각하는 논쟁에 대해서 정리하는 항목이라 할 수 있겠다. 1 ) Abrahams의 예외 안전성 보장들을 강략히 정의하라. 기본 보장(basic guarantee) : 자원 누수는 일어나지 않으며, 연산 실패된 객체의 파괴가 가능하다는 보장, : 쉽게 말해서 RAII 를 들 수 있겠다..
예외 안전성 검색 결과
제일 싫어하는 try 와 catch 이다. 사용해 본적이 별로 없어서인지 친근하지 않을 뿐더로, 알아야 할 것이 산떠미 처럼 쌓여(.. C++ 이 원래 그렇지만 )있으니, 손 댈 때도 조심해야 할 것이다. 1 ) try 블록 이란? 코드를 보자. #include #include int main( void ) { bool some_condition = true; bool some_other_condition = true; try { if( some_condition ) { throw std::string( "this is a string" ); } else if( some_other_condition ) { throw 42; } } catch( const std::string& rError ) { // s..
클래스에 있어, 그 클래스 타입에 대한 복사가 이루어 질 경우가 반드시 있게 된다. 이런 복사는 초기에 생선자 호출에서 갖었던 모든 위험성을 다시 한번 더 반복해야 하는 비용을 물어야 한다. 이것은 클래스 설계에 있어 심한 문제 중에 한가지 이다. 이번 항목은 어떠한 클래스라도 복사 할당자(복사 할당 연산자)를 보다 더 견고하게 설계하는 방법을 찾아 가 본다. 이미 이 방법을 아는 사람이 많으므로 자세히 설명하기 보단 요점만 짚고 넘어 가는게 좋겠다. 질문 1 예외 안전성의 일반적인 세 가지 레벨에 대해서 설명하라 질문 2 예외 안전성이 높은 복사 할당자의 표준적인 형태는 무엇인가? 질문 3 다음 클래스에서 T1 이나 T2 연산 중 아무거나 예외를 발생시킬 수 있다면, 이 클래스의 구조를 바꾸지 않고, ..
항목 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..
항목 17에서 객체의 생명주기와 예외의 관련성에 대해서 이야기 했다면, 이번 항목에서는 객체 생성자에서 발생된 예외는 어떻게 진행되며, 어떻게 처리 해야 좋을 지에 대한 고민을 하는 항목이다. 질문 1. 항목 17의 예제 1에서 A나 B의 생성자가 예외를 발생시키면 C의 생성자가 그 예외를 흡수해서 예외를 아예 발생하지 않게 하는 것이 가능한가? 예와 함께 왜 이런 식으로 되었는지에 대한 근거를 제시하라. 질문 2. C의 생성자(들)에 안전하게 빈 throw 정의를 넣을 수 있도록 A와 B가 지켜야 하는 최소한의 요건은 무엇인가? 해설 질문 1. 해당 질문에 답하기 위해선 표준 예외 발생에 대한 규정을 알고 있어야 할 듯 싶어, 책에서 몇가지 규칙을 설명해 준다. 1. 핸들러가 단순히 'return;' ..
최근댓글