본 내용은 "Exceptional C++ : C++ 프로그래머를 자극하는 47개의 재미있는 퍼즐·문제" 책에서 문제만 발취한것임을 미리 밝힙니다.
난이도 8 이다. 와우~ 제목 그대로 이런 컨테이너를 만들어 보라는 의도~ 힌트로는 클라이언트 코드에서는 어떻게 사용할지를 생각해 보면 된다고 한다.
문제
1. 어떻게 하면 다음과 같은 고정 길이 벡터(vector) 클래스의 복사 생성자와 복사 할당자를 가장 잘 구현할 수 있을까? 어떻게 하면 생성자와 할당자를 최대로 사용 할 수 있을까?
주의점 : 절대로 다른 것들을 고쳐서는 안된다. 오직 복사 생성자와 복사 할당자만을 구현하는것이다. 또한 STL 호환이 아니다!
문제 : 어떻게 하면 복사 생성자와 복사 할장자를 가장 잘 구현할 수 있을까?
전제조건 : 다른 점은 고치지 않아야 하며, 완전한 STL-호환은 아니고, 하나의 민감한 문제점만 가지고 있을 뿐이다.
내가 만들어본 코드
이 코드를 만들면서 생각한 것들
1. 템플릿이 사용됨으로써 코드가 매우 많이 증식 될 수 있음, 그러므로 템플릿 매개변수
두번째것을 클래스 멤버 변수로 두어, 생성자 단계에서 new 해야 한다고 생각함 )만들어야 된다고 생각함. 하지만 그렇게 만들게 될 경우, 복사
생성자와 복사 할당자에서 길이를 재야 한다는 구조가 필요함으로 생각하지 않기로 함과 3번째 생각과 문제가 겹침
2. 복사 생성자 때문에 기본 생성자를 컴파일러가 안만들어 줌, 그래서 기본 생성자를 만들었음
3. 복사 할당자에서 기존의 복사 생성자를 호출하여 임시객체를 만들어 swap 시킴으로써 예외 안전성을 확보하려고 하였으나, .. 배열이므로 포기함(배열의 첫번째는 상수성 포인터 이니까..)
총평
역시 난이도 8, 이 정도면 조금은 쓸만하려나? 를 의심하게 된다. ... 왜 멤버 템플릿을
힌트로 주었는지 이해하지 못했다. 아직 나에게 풀어야할 과제, 그리고 이 문제는 항목 5로 해결책을 넘겼으므로 아직 풀어야 할 과제를 언급했을
거라는 기대를 해본다.
'책 정리 > Exceptional C++' 카테고리의 다른 글
예외에 안전한 코드에 대한 생각을 하게된 폭팔적인 계기 (0) | 2008.10.07 |
---|---|
항목 18 : 코드 복잡성 - 파트 1 (난이도 9) (0) | 2008.10.06 |
항목 7 : 표준 라이브러리의 사용(혹은, 다시 보는 임시 개체) (난이도 5) (0) | 2008.10.06 |
항목 6 : 임시 개체들 (난이도 5) (0) | 2008.10.06 |
항목 5 : 최대 재사용 가능한 일반 컨테이너 - 파트 2 (난이도 6) (0) | 2008.10.06 |
항목 47 : 흐름 제어 (난이도 : 6) (0) | 2008.10.04 |
항목 46 : 포워딩 함수 (난이도 : 3) (0) | 2008.10.04 |
항목 45 : BOOL (난이도 7) (0) | 2008.10.04 |
항목 44 : 캐스트 (난이도 : 6) (2) | 2008.10.04 |
항목 43 : const - 정확성 (난이도 : 6) (0) | 2008.10.03 |
최근댓글