shared_ptr 예제

shared_ptr은 원시 포인터를 위한 컨테이너입니다. 공유_ptr의 모든 복사본과 협력하여 포함된 포인터의 참조 수를 유지 관리하는 참조 카운트 소유권 모델입니다. 따라서 카운터는 새 포인터가 리소스를 가리키고 개체의 소멸자가 호출될 때 감소될 때마다 증가됩니다. 기본적으로 shared_ptr은 참조 수를 증가시키고 소유권을 이전하지 않습니다. 그러나 std::move를 사용하여 소유권을 이전할 수 있습니다: shared_ptr은 다른 개체에 포인터를 저장하는 동안 개체의 소유권을 공유할 수 있습니다. 이 기능은 멤버 객체가 속한 객체를 소유하는 동안 멤버 객체를 가리키는 데 사용할 수 있습니다. 저장된 포인터는 get(), 디레퍼론 및 비교 연산자로 액세스하는 포인터입니다. 관리되는 포인터는 사용 수가 0에 도달하면 삭제에 전달된 포인터입니다. weak_ptr은 shared_ptr의 복사본으로 만들어집니다. 하나 이상의 shared_ptr 인스턴스가 소유하지만 참조 계산에 참여하지 않는 개체에 대한 액세스를 제공합니다. weak_ptr의 존재 또는 파괴는 shared_ptr 또는 다른 복사본에 영향을 주지 않습니다. 경우에 따라 shared_ptr 인스턴스 간의 순환 참조를 끊는 것이 필요합니다. std:::shared_ptr 또는 다른 std::weak_ptr에서 만 std::weak_ptr을 만들 수 있습니다.

예를 들어 클래스 템플릿 std::shared_ptr은 개체의 소유권을 다른 공유 포인터와 공유할 수 있는 공유 포인터를 정의합니다. 이는 단독 소유권을 나타내는 std::unique_ptr과 대조됩니다. shared_ptr에 의해 직접 보유 된 포인터는 get()에 의해 반환 되는 포인터이며, 컨트롤 블록에 의해 보유 된 포인터 /개체는 공유 소유자 수가 0에 도달하면 삭제됩니다. 이러한 포인터가 반드시 같지는 않습니다. shared_ptr을 전달하는 방법을 결정할 때 는 받는 이 기본 리소스의 소유권을 공유해야 하는지 여부를 결정합니다. „소유자”는 필요한 기간 동안 기본 리소스를 계속 유지할 수 있는 개체 또는 함수입니다. 호출한 사람이 호출 수신 대기 가 포인터의 수명을 함수의 수명(함수)의 수명 이상으로 연장할 수 있도록 보장해야 하는 경우 첫 번째 옵션을 사용합니다. 예약 처리가 수명을 연장하는지 여부를 신경 쓰지 않으면 참조로 전달하고 예약 처리를 복사할지 여부를 지정합니다. 따라서 순환 종속성 use_count로 인해 shared_ptr의 경우 weak_ptr을 사용하여 방지되지 않는 0에 도달하지 못하므로 A_ptr을 weak_ptr로 선언하여이 문제를 제거하므로 클래스 A는 이를 소유하지 않으므로 액세스 권한이 있으며 유효성을 확인해야합니다. 개체가 범위를 벗어날 수 있습니다.

일반적으로 디자인 문제입니다. 가능하면 make_shared 함수를 사용하여 메모리 리소스를 처음 만들 때 shared_ptr을 만듭니다. make_shared는 예외로 안전합니다. 동일한 호출을 사용하여 컨트롤 블록과 리소스에 대한 메모리를 할당하므로 구성 오버헤드가 줄어듭니다. make_shared를 사용하지 않는 경우 shared_ptr 생성자에게 전달하기 전에 명시적 새 식을 사용하여 개체를 만들어야 합니다. 다음 예제에서는 새 개체와 함께 shared_ptr을 선언하고 초기화하는 다양한 방법을 보여 주며 있습니다. 기본 포인터 또는 기본 개체에 대한 참조를 전달합니다. 이렇게 하면 받는 사용자가 개체를 사용할 수 있지만 소유권을 공유하거나 수명을 연장할 수는 없습니다.

Comment is closed.