본문 바로가기
프로그래밍/c++

shared_ptr(스마트포인터)

by 오늘의논리 2024. 1. 22.
728x90
 

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로 변환할 수 있습니다.

728x90

'프로그래밍 > 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

댓글