알다 시피 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을 만들어 내지 않았을까? 한다.


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