* 정의
스마트 포인터(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 |