shared_ptr은 C++ 표준 라이브러리의 스마트 포인터 중 하나로, 여러 개의 shared_ptr이 하나의 객체를 공유할 수 있습니다. shared_ptr은 참조 카운팅(reference counting)을 사용하여 객체의 수명을 관리합니다. 즉, 객체를 가리키는 shared_ptr의 개수를 세어서, 마지막 shared_ptr이 소멸하거나 다른 객체를 가리키도록 변경되면 객체를 자동으로 삭제합니다. shared_ptr은 다음과 같은 방법으로 생성할 수 있습니다.
// make_shared 함수를 사용하여 객체를 동적 할당하고 shared_ptr로 감싼다.
std::shared_ptr<int> p1 = std::make_shared<int>(10);
// 기존의 포인터를 shared_ptr로 변환한다.
int* p2 = new int(20);
std::shared_ptr<int> p3(p2);
// 다른 shared_ptr을 복사하거나 이동한다.std::shared_ptr<int> p4 = p1; // 복사 생성자std::shared_ptr<int> p5 = std::move(p3); // 이동 생성자
shared_ptr은 다음과 같은 멤버 함수들을 제공합니다1.
- shared_ptr::shared_ptr: 생성자
- shared_ptr::~shared_ptr: 소멸자
- shared_ptr::operator=: 대입 연산자
- shared_ptr::reset: 포인터를 재설정하거나 해제한다.
- shared_ptr::swap: 다른 shared_ptr과 교환한다.
- shared_ptr::get: 원시 포인터를 반환한다.
- shared_ptr::operator*: 객체에 대한 참조를 반환한다.
- shared_ptr::operator->: 객체에 대한 포인터를 반환한다.
- shared_ptr::use_count: 참조 카운트를 반환한다.
- shared_ptr::unique: 참조 카운트가 1인지 확인한다.
- shared_ptr::operator bool: 포인터가 비어있는지 확인한다.
shared_ptr은 다른 스마트 포인터와 함께 사용할 수 있습니다. 예를 들어, weak_ptr은 shared_ptr과 같은 객체를 가리킬 수 있지만, 참조 카운트에 영향을 주지 않습니다. weak_ptr은 shared_ptr로 변환하여 객체에 접근할 수 있습니다. 또한, shared_ptr은 static_pointer_cast, dynamic_pointer_cast, const_pointer_cast 등의 함수를 사용하여 다른 타입의 shared_ptr로 변환할 수 있습니다.
'프로그래밍 > c++' 카테고리의 다른 글
unique_ptr(스마트포인터) (0) | 2024.01.22 |
---|---|
weak_ptr(스마트 포인터) (0) | 2024.01.22 |
알고리즘 (0) | 2023.03.06 |
set, multimap, multiset (0) | 2023.03.04 |
map (0) | 2023.03.04 |
댓글