std::shared_ptr
-
스마트 포인터 참조 가이드(Smart Pointer Referece Guide)Modern C++/Smart Pointer 2020. 7. 12. 20:11
1. new를 이용한 동적 객체 생성은 피하되 필요한 경우 스마트 포인터를 사용하라. 스택을 사용하고 할당연산자나 이동/복사 연산을 사용하는게 객체의 수명 관리가 편해 코드가 어떻게 동작하는 지 예측하기 편하다. 동적 할당은 메모리를 힙에 할당하는 데 비용이 드는 것 뿐 만 아니라 메모리의 위치가 연속적이지 않아 컴파일러가 코드의 최적화를 수행하는 데 걸림돌이 되기도 한다. 메모리 할당은 필요할 때만 해야하고 new/delete를 직접 사용하지 않고 스마트 포인터를 사용하면 메모리를 직접 관리해야 하는 부담을 줄일 수 있다. 2. 스마트 포인터 선택 시 가장 먼저 std::unique_ptr 사용을 고려하라. 동적 메모리 할당이 필요한 경우 우선적으로 std::unique_ptr 사용을 고려한다. std..
-
2. std::shared_ptr 과 std::weak_ptrModern C++/Smart Pointer 2020. 7. 12. 17:07
std::shared_ptr 동적 할당된 객체의 소유권을 공유할 때 std::shared_ptr를 이용해 메모리를 관리한다. 메모리 해제 시점은 동적 객체를 가리키는 모든 공유 포인터가 더 이상 해당 객체를 가리키지 않을 때로 더 이상 공유 포인터가 가리키는 객체의 수명에 대해 신경 쓸 필요가 없어진다. 이렇게 메모리가 해제되는 시점은 원자적 참조 횟수(atomic reference count)를 통해 공유 포인터 생성 시 카운트를 증가시키고, 소멸 시 카운트를 감소시킨다. 복사 배정 연산자의 경우 증가와 감소가 모두 일어난다. 참조 횟수는 제어 블록(control block)에서 관리하며 공유 포인터의 대략적인 구조는 아래와 같다. 위와 같이 공유 포인터는 객체를 가리키는 포인터와 별개로 제어블록을 가..