클래스에 있어, 상속은 매우 강력한 기능 중에 한가지 이며, 매우 위험한 기능 중에 한가지 이다. 매우 위험한 기능이라 표현한 이유는 상속에 따른 문제점이 우후죽순처럼 불거지기 때문이다. 어쩔때 보면, 너무 불거저서 모두 빨간색으로 보일 때도 있었다. (.. 잘못된 상속은 그만큼 위험하다는 뜻입니다.) 이번 항목은 이런 상속 중 "is-implemented-in-terms-of" 상속이 무엇이며, 구현 방법 중 어느 것이 더 좋을 지에 대한 논의(일반적인 생활에 논의라는 말은 안쓰이는데, C++ 책에서는 무척 많이 나온다. 곰곰히 생각해 보니, "이야기"는 단방향인거 같고, 상호작용하며 이야기 하여, 결론에 도달하는 말 자체가 "논의"로 쓰기에 딱 좋은거 같다. ) 이다. 질문 1. "is-impleme..
책 정리 검색 결과
클래스에 있어, 그 클래스 타입에 대한 복사가 이루어 질 경우가 반드시 있게 된다. 이런 복사는 초기에 생선자 호출에서 갖었던 모든 위험성을 다시 한번 더 반복해야 하는 비용을 물어야 한다. 이것은 클래스 설계에 있어 심한 문제 중에 한가지 이다. 이번 항목은 어떠한 클래스라도 복사 할당자(복사 할당 연산자)를 보다 더 견고하게 설계하는 방법을 찾아 가 본다. 이미 이 방법을 아는 사람이 많으므로 자세히 설명하기 보단 요점만 짚고 넘어 가는게 좋겠다. 질문 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("헬로우 월드형~");" 을 쳐보는것이 이 세상의 이..
최근댓글