클래스에 있어, 그 클래스 타입에 대한 복사가 이루어 질 경우가 반드시 있게 된다. 이런 복사는 초기에 생선자 호출에서 갖었던 모든 위험성을 다시 한번 더 반복해야 하는 비용을 물어야 한다. 이것은 클래스 설계에 있어 심한 문제 중에 한가지 이다. 이번 항목은 어떠한 클래스라도 복사 할당자(복사 할당 연산자)를 보다 더 견고하게 설계하는 방법을 찾아 가 본다. 이미 이 방법을 아는 사람이 많으므로 자세히 설명하기 보단 요점만 짚고 넘어 가는게 좋겠다. 질문 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..
포인터 관련해서 프로그래머는 많은 이야기를 듣게 되듣이 예외 안전성에 있어 포인터는 참 안타까우면서 놀라운 존재로 보여진다. 이번 항목은 함수의 매개변수에 포인터를 넘기게 될 때 문제가 생길 수 있음을 지적한다. 질문 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 를 리턴하고 예외가 없을 경우 ..
템플릿 메타 프로그래밍은 C++ 컴파일러가 컴파일 하기전에 코드를 읽고 그 코드에 들어간 메타 프로그래밍을 읽어 코드를 제어하여, 새로운(은 아니지만 이해상..) 코드를 만들어내어 생산성을 극대화 시키는 언어이다. 이런 템플릿 메타 프로그래밍은 표준 STL에 그 막강함을 자랑하며, Boost 의 강력함을 한층 더해주는 초강력 무기이다. 이 초강력 무기를 사용함에 있어, 이 무기는 프로그래밍 언어이라는 개념이 있어야 한다. 표준 STL 이나 Boost 를 사용했을 언어라는 느낌보다는 "그냥 쓰니까 되네" 라는 느낌이 더 강하기 때문에 이런 초기 개념을 "언어"라고 보는게 더 속편할지도 모르겠다. 언어를 알아감에 있어, 가장 처음에 하는것이 "printf("헬로우 월드형~");" 을 쳐보는것이 이 세상의 이..
프로그래머에게 있어 자료구조는 반드시 필요한 것이기에 자체적으로 링크드리스트를 만들어서 사용 하다가, C++로 처음 넘어가, 표준 STL 을 사용 하면서 그 강력함에 맛을 들게 되었다. 어줍잖은 실력으로 Boost 라이브러리를 사용하면서, 꼭 알고 넘어가야 겠다는 생각이 들어, 국내 번역서 책을 찾다가 물망에 오른 책이 C++ Template Metaprogramming Modern C++ Design 책이였다. Modern 은 너무 어려워서, 못보겠다는 말을 너무 많이 들어, C++ Template Metaprogramming 책을 구입하게 되었다. 번역은 류광씨가 했다. 류광씨 번역이 다소 이해하기 어려운 부분이 있지만, 번역되는 책 자체가 대부분 어려운 책이라 번역할 때 매우 힘들지 않았을까? 느낌..
최근댓글