초보 코린이의 성장 일지

스마트 포인터 (Smart Pointer) 본문

개인 공부

스마트 포인터 (Smart Pointer)

코오린이 2023. 4. 3. 01:07

TSharedPtr(공유 포인터)
- 자신이 참조하는 개체를 소유하며, 해당 개체의 삭제를 무기한 방지하고 공유 포인터, 공유 참조가 참조하지
않을 때 궁극적으로 삭제를 처리합니다. 
- 포인터 소유자가 범위를 벗어나거나, 소유권을 포기할 때까지 삭제되지 않는다.
- 참조 횟수가 계산되는 포인터, 하나의 포인터를 여러 소유자에게 할당하려고 할 때 사용
- 포인터는 비어 있을 수 있다 즉 어떠한 개체도 참조하고 있지 않다는 의미.
- null이 아닌 공유 포인터는 참조하는 개체에 대한 공유 참조를 생성할 수 있다.

TSharedRef(공유 참조)
- 참조하는 개체를 소유한다는 점에서 공유 포인터처럼 작동한다.
- 공유 참조는 항상 null이 아닌 개체를 참조해야 한다.
- 공유 포인터에는 제한이 없기 때문에 공유 참조는 항상 공유 포인터로 변환될 수 있으며, 해당 공유 포인터는 유효한 개체를 참조하도록 보장된다.
- 참조된 개체가 null이 아님을 보장하거나, 공유 개체 소유권을 나타내려는 경우 공유 참조를 사용한다.

TWeakPtr(약한 포인터)
- Shared_prt과 함께 사용이 가능한 스마트 포인터
- 하나 이상의 인스턴스가 소유하는 개체에 대한 액세스를 제공하지만, 참조수 계산에 참가하지는 않는다.
- 개체를 관찰하는 동시에 해당 개체를 활성 상태로 유지하지 않으려는 경우 사용
- 공유 포인터와 유사하지만 참조하는 개체를 소유하지 않으므로, 수명 주기에 영향을 주지 않는다.
- 순환을 끊기 때문에 매우 유용할 수 있으나, Weak Pointer이 경고 없이 언제든지 null이 될 수 있음을 알아야한다.
- 이러한 이유로인해 Weak Pointer는 참조하는 개체에 대한 공유 포인터를 생성하여, 사용자가 일시적으로 개체에 안전하게 액세를할 수 있도록 해줘야한다.

TUniquePtr(고유 포인터)
- 참조하는 개체를 단독으로 명시적으로 소유한다 즉 한 명의 소유자만 허용
- 고유 포인터는 하나만 있을 수 있으므로, 소유권을 이전할 수 있지만 복사하거나 공유할 수는 없다.
- UniquePtr을 복사하려고 하면 컴파일 오류가 발생한다.
- 범위를 벗어나면 참조하는 객체를 자동으로 삭제한다.
- 빠른 삽입 및 검색을 위해 rvalue 참조를 지원한다.


장점
- 대부분의 스마트 포인터 역참조는 일반 c++ 포인터만큼 빠르다.
- 스마트 포인터를 복사하면 메모리가 할당되지 않는다.

단점
- 스마트 포인터를 만들고 복사하는 것은 일반 c++ 포인터를 만들고 복사하는 것보다 더 많은 오버헤드를 수반한다.
- 일부 스마트 포인터는 일반 c++ 포인터보다 더 많은 메모리를 사용한다.

'개인 공부' 카테고리의 다른 글

소프트웨어 낮은 결합도 / 높은 응집도  (0) 2023.04.10
레이스컨디션 (Race Condition)  (0) 2023.04.10
가상 메모리  (0) 2023.03.04
IDE (통합 개발 환경 - Integrated Development Environment)  (0) 2023.02.23
C 정리  (0) 2023.01.19
Comments