알다 시피 C++ 프로그래머에게 있어, 클래스의 멤버가 pointer 일 경우 각별한 주의가 필요로 한다는 것은 알 것이다. 그렇다면, 영리한 포인터 녀석들을 넣을 경우, 생길 수 있는 문제점을 알고 있는가?
이번 항목은 그런 문제에 대해서 이야기 하고 생각해 보는 시간을 갖기 위해 존재 한다.
질문 1. 다음 코드가 매우 불안한 이유는?
단번에 알겠지만, 메모리 누수가 일어 나거나, 두번 릴리즈 하게 된다.
질문 2. 그렇다면 스마트 포인터를 사용 한다면, 어떤 문제가 있을까?
.. 이것은 smart_ptr 중 auto_ptr에 국한 되지 않을 것이다.
auto_ptr에서만 본다면, 소유권 개념 떄문에 때문에 복사 생성자나 복사 할당자에서 본래의 객체의 포인터는 릴리즈 되어 버릴 것이다. 경우에 따라서 이걸 의도 하여 쓸 수 있겠으나 알고서 쓰는것과 그냥 쓰는것은 차이가 있으니, 한번쯤 생각해 봐야 할 것이다.
생각해 봐야 할 것들
1. 복사 생성자를 어떻게 만들어야 하는가?
2. 복사 할당자를 어떻게 만들어야 하는가?
3. 생성자를 어떻게 만들어야 하는가?
4. 소멸자를 어떻게 할 것인가?
기본적인 auto_ptr 관련 링크
C++ 이야기 첫번째: auto_ptr 템플릿 클래스 소개
Chang-Min On Software : auto_ptr
IT 전뇌실/Exceptional C++ - 항목 37 : AUTO_PTR (난이도 8)
총평
C++ 프로그래머에게 있어 포인터는 ... 참 놀라운 존재가 아닐 수 없다. 이런 많은 생각들이 boost 의 smart_ptr을 만들어 내지 않았을까? 한다.
'책 정리 > More Exceptional C++' 카테고리의 다른 글
항목 27 : (비)순수 가상 함수 ( 난이도 : 7 ) (0) | 2008.12.16 |
---|---|
항목 26 : 다중 상속과 샴 쌍둥이 문제 ( 난이도 : 4 ) (0) | 2008.12.16 |
항목 25 : 다중 상속 에뮬레이션 ( 난이도 : 5 ) (0) | 2008.12.16 |
항목 24 : 왜 다중 상속을? ( 난이도 : 6 ) (0) | 2008.12.16 |
항목 31 : 스마트 포인터 멤버 Part 2 : ValuePtr을 향해 ( 난이도 : 6 ) (0) | 2008.12.14 |
항목 29 : auto_ptr 사용 하기 (난이도 : 5) (0) | 2008.12.14 |
항목 35 : #define (난이도 : 4) (0) | 2008.12.13 |
항목 34 : 전처리 매크로 ( 난이도 : 4 ) (0) | 2008.12.13 |
항목 33 : 네스티드 함수 시뮬레이션 (nested function) ( 난이도 : 5 ) (0) | 2008.12.13 |
항목 32 : 재귀적인 선언 ( 난이도 : 6 ) (0) | 2008.12.13 |
최근댓글