A. 모던 C++ 스마트 포인터
2. weak_ptr
a. weak_ptr이란?
🌟 shared_ptr의 순환 참조를 방지하기 위해 사용
- 객체를 소유하지 않고 참조만 할 수 있음
- 객체의 수명을 연장하지 않으므로, 객체가 소멸되더라도 weak_ptr은 만료
- 독립적이지 않고 shard_ptr에 의존적으로 사용됨
- shard_ptr 카운트는 날려도 되는지 여부를 카운팅함
👉 shard_ptr이나 weak_ptr 둘 중 하나 골라서 사용하면 됨!
shared_ptr을 사용할 때 사이클이 발생하는 부분에 대해서만 깔끔하게 처리해주면 된다
b. weak_ptr의 개념
캐스팅과 비슷, 널포인터이면 사용 X, 포인터이면 사용된다!
3. unique_ptr
a. unique_ptr이란?
🌟 동적으로 할당된 메모리를 관리하는 스마트 포인터로, 해당 포인터가 소유하는 객체에 대해 단일 소유권을 가짐
- 즉, 복사 X 이동 O 포인터
- 매니저 클래스같은 곳에 사용하기 좋음
- 거의 사용하지 않음
b. unique_ptr의 특징
- 단일 소유자: 특정 객체를 오직 한 번만 소유할 수 있으며, 소유권이 이전되거나 공유 X . 다른 std::unique_ptr으로 이동할 수 있지만, 복사될 수는 없음
- 자동 해제: 소유한 객체가 더 이상 필요하지 않을 때 자동으로 메모리를 해제. RAII(Resource Acquisition Is Initialization) 원칙을 따르므로 메모리 누수를 방지하는 데 도움이 됨
- Move 시맨틱스: 소유권을 이동시키는 move 시맨틱스를 지원. std::unique_ptr이 다른 std::unique_ptr로 이동될 때 소유권이 전달되며, 이전 포인터는 null 포인터로 만들어짐
- 배열 지원: std::unique_ptr은 배열과 같은 동적으로 할당된 메모리를 관리
⏳ 예제
#include <memory>
int main() {
// 단일 객체에 대한 unique_ptr 생성
std::unique_ptr<int> ptr(new int(42));
// move 시맨틱스를 사용하여 소유권 이전
std::unique_ptr<int> ptr2 = std::move(ptr);
// 배열에 대한 unique_ptr 생성
std::unique_ptr<int[]> arrPtr(new int[5]);
// 자동 해제됨
return 0;
}
[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버 -
어디부터 시작할지 막막한 게임 프로그래밍 입문자를 위한 All-In-One 커리큘럼입니다. C++, 자료구조/알고리즘, STL, 게임 수학, Windows API, 게임 서버 입문으로 이어지는 알찬 커리큘럼으로 게임 프
www.inflearn.com
'프로그래밍 언어 > C++' 카테고리의 다른 글
[게임 프로그래머 입문 올인원] 모던 C++ 스마트 포인터 : shared_ptr (83강) (0) | 2024.03.30 |
---|---|
[게임 프로그래머 입문 올인원] 모던 C++ : 오른값 참조 (82강) (0) | 2024.03.30 |
[게임 프로그래머 입문 올인원] 모던 C++ : 멀티바이트와 유니코드(81강) (0) | 2024.03.30 |
[게임 프로그래머 입문 올인원] 모던 C++ : std::string (80강) (0) | 2024.03.30 |
[게임 프로그래머 입문 올인원] STL Algorithms : 기본정렬 (78강) (0) | 2024.03.28 |