본문 바로가기

메모장/C++

[C++] 스마트 포인터 메모

스마트 포인터란?

프로그램이 메모리 및 리소스 누수 없이 예외로부터 안전한지 확인하는 데 사용되는 포인터.

 

스마트 포인터(최신 C++)

자세한 정보: 스마트 포인터(최신 C++)

learn.microsoft.com

 

메모리 누수가 일어나는 상황 + 스마트 포인터 적용 예제 : 

 

개체 수명 및 리소스 관리(RAII)

리소스 누수 방지를 위해 최신 C++에서 RAII 원칙을 따릅니다.

learn.microsoft.com

 

3가지의 스마트 포인터

  • unique_ptr
    기본 포인터로 한 명의 소유자만 허용합니다. shared_ptr이 필요하다는 점을 확실히 알 경우 POCO의 기본 선택으로 사용합니다. 새 소유자로 이동할 수 있지만 복사하거나 공유할 수 없습니다. 사용하지 않는 auto_ptr을 대체합니다. boost::scoped_ptr과 비교합니다. unique_ptr 는 작고 효율적입니다. 크기는 하나의 포인터이며 C++ 표준 라이브러리 컬렉션에서 빠른 삽입 및 검색을 위한 rvalue 참조를 지원합니다. 헤더 파일: <memory>. 자세한 내용은 방법: unique_ptr 인스턴스 만들기 및 사용  unique_ptr 클래스를 참조하세요.
  • shared_ptr
    참조 횟수가 계산되는 스마트 포인터입니다. 원시 포인터 하나를 여러 소유자에게 할당하려고 할 경우 사용합니다(예: 컨테이너에서 포인터 복사본을 반환할 때 원본을 유지하고 싶을 경우). 원시 포인터는 모든 shared_ptr 소유자가 범위를 벗어나거나 소유권을 포기할 때까지 삭제되지 않습니다. 크기는 2개의 포인터입니다. 하나는 개체용이고, 다른 하나는 참조 횟수가 포함된 공유 제어 블록용입니다. 헤더 파일: <memory>. 자세한 내용은 방법: shared_ptr 인스턴스 만들기 및 사용  shared_ptr 클래스를 참조하세요.
  • weak_ptr
    shared_ptr과 함께 사용할 수 있는 특별한 경우의 스마트 포인터입니다. weak_ptr은 하나 이상의 shared_ptr 인스턴스가 소유하는 개체에 대한 액세스를 제공하지만, 참조 수 계산에 참가하지 않습니다. 개체를 관찰하는 동시에 해당 개체를 활성 상태로 유지하지 않으려는 경우 사용합니다. shared_ptr 인스턴스 사이의 순환 참조를 차단하기 위해 필요한 경우도 있습니다. 헤더 파일: <memory>. 자세한 내용은 방법: weak_ptr 인스턴스 만들기 및 사용  weak_ptr 클래스를 참조하세요.

 

 

'메모장 > C++' 카테고리의 다른 글

[C++/etc] 키워드 사전 (수정중)  (0) 2022.11.23
[c++] async 테스트  (0) 2021.12.15
[C++] 구조체의 크기 (size of struct)  (3) 2020.11.18
[C, C++] 표준 입출력 실험 (scanf)  (0) 2019.09.03
C++/STL List를 순회하는 방법  (0) 2019.05.24