* 정의

 

스마트 포인터(smart pointer)는 생 포인터를 감싸는 일종의 래퍼(wrapper)로 생 포인터와 아주 비슷한 방식으로 동작하되 생 포인터로 인해 발생하는 문제점들을 해결할 수 있다. 간단히 오류의 여지가 적은 생 포인터라고 생각하면 된다.

 

 

* 사용 이유

 

생 포인터(raw pointer)는 강력한 수단이지만 조금이라도 관리를 소홀히 하면 여러가지 문제점이 발생할 수 있다.

 

  • 선언으로 객체인지 배열인지 구분하기 어렵다. 이는 접근, 삭제할 때 문제가 된다.
  • 선언으로 포인터가 가리키는 객체를 직접 파괴해야하는 지 알 수 없다. (피지칭 객체를 소유 여부를 알 수 없음)
  • 객체를 직접 파괴해야 한다는 점을 알더라도 구체적인 파괴 방식에 대한 정보를 얻을 수 없다. (방식으로는 delete, 특정 파괴(소멸) 메커니즘 등 이 존재한다.)
  • 위의 조건을 모두 알고 있다고 하여도 코드의 모든 경로에서 파괴가 정확히 한 번 일어남을 보장하기가 어렵다.
  • 포인터가 피지칭 객체를 잃었는 지를 알아내는 방법은 없다.

스마트 포인터를 사용하면 생 포인터와 비슷하게 동작하되 위의 문제점을 겪지 않게 도와준다.

 

 

* 종류

 

  • std::auto_ptr
  • std::unique_ptr
  • std::shared_ptr
  • std::weak_ptr

이들은 모두 동적 할당된 객체의 수명 관리에 도움이 되도록 보장함으로써 자원 누수가 생기지 않다록 설계되어 있다.

여기서 std::auto_ptr은 사용되지 않으며 std::unique_ptr로 대체되었다.

 

'C++' 카테고리의 다른 글

스마트 포인터 - std::shared_ptr  (0) 2022.03.22
스마트 포인터 - std::unique_ptr  (0) 2022.03.22
decltype  (0) 2022.03.17
auto의 형식 연역 규칙  (0) 2022.03.15
템플릿의 형식 연역 규칙  (0) 2022.03.11

+ Recent posts