본 내용은 "Exceptional C++ : C++ 프로그래머를 자극하는 47개의 재미있는 퍼즐·문제" 책에서 문제만 발취한것임을 미리 밝힙니다.

난이도 8 이다. 와우~ 제목 그대로 이런 컨테이너를 만들어 보라는 의도~ 힌트로는 클라이언트 코드에서는 어떻게 사용할지를 생각해 보면 된다고 한다.

문제
1. 어떻게 하면 다음과 같은 고정 길이 벡터(vector) 클래스의 복사 생성자와 복사 할당자를 가장 잘 구현할 수 있을까? 어떻게 하면 생성자와 할당자를 최대로 사용 할 수 있을까?

주의점 : 절대로 다른 것들을 고쳐서는 안된다. 오직 복사 생성자와 복사 할당자만을 구현하는것이다. 또한 STL 호환이 아니다!



문제 : 어떻게 하면 복사 생성자와 복사 할장자를 가장 잘 구현할 수 있을까?
전제조건 : 다른 점은 고치지 않아야 하며, 완전한 STL-호환은 아니고, 하나의 민감한 문제점만 가지고 있을 뿐이다.

 


내가 만들어본 코드

이 코드를 만들면서 생각한 것들
1. 템플릿이 사용됨으로써 코드가 매우 많이 증식 될 수 있음, 그러므로 템플릿 매개변수 두번째것을 클래스 멤버 변수로 두어, 생성자 단계에서 new 해야 한다고 생각함 )만들어야 된다고 생각함. 하지만 그렇게 만들게 될 경우, 복사 생성자와 복사 할당자에서 길이를 재야 한다는 구조가 필요함으로 생각하지 않기로 함과 3번째 생각과 문제가 겹침

2. 복사 생성자 때문에 기본 생성자를 컴파일러가 안만들어 줌, 그래서 기본 생성자를 만들었음

3. 복사 할당자에서 기존의 복사 생성자를 호출하여 임시객체를 만들어 swap 시킴으로써 예외 안전성을 확보하려고 하였으나, .. 배열이므로 포기함(배열의 첫번째는 상수성 포인터 이니까..)

 

총평
역시 난이도 8, 이 정도면 조금은 쓸만하려나? 를 의심하게 된다. ... 왜 멤버 템플릿을 힌트로 주었는지 이해하지 못했다. 아직 나에게 풀어야할 과제, 그리고 이 문제는 항목 5로 해결책을 넘겼으므로 아직 풀어야 할 과제를 언급했을 거라는 기대를 해본다.

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기