다음을 통해 공유


shared_ptr Class

참조 카운트 스마트 포인터가 동적으로 할당 된 개체 주위에 배치합니다.

template<class Ty>
   class shared_ptr {
public:
    typedef Ty element_type;

    shared_ptr();
    shared_ptr(nullptr_t); 
    shared_ptr(const shared_ptr& sp);
    shared_ptr(shared_ptr&& sp);
    template<class Other>
        explicit shared_ptr(Other * ptr);
    template<class Other, class D>
        shared_ptr(Other * ptr, D dtor);
    template<class D>
        shared_ptr(nullptr_t, D dtor);
    template<class Other, class D, class A>
        shared_ptr(Other *ptr, D dtor, A alloc);
    template<class D, class A>
        shared_ptr(nullptr_t, D dtor, A alloc);
    template<class Other>
        shared_ptr(const shared_ptr<Other>& sp);
    template<class Other>
        shared_ptr(const shared_ptr<Other>&& sp);
    template<class Other>
        explicit shared_ptr(const weak_ptr<Other>& wp);
    template<class Other>
        shared_ptr(auto_ptr<Other>& ap);
    template<class Other, class D>
        shared_ptr(unique_ptr<Other, D>&& up);
    template<class Other>
        shared_ptr(const shared_ptr<Other>& sp, Ty *ptr);
    ~shared_ptr();
    shared_ptr& operator=(const shared_ptr& sp);
    template<class Other> 
        shared_ptr& operator=(const shared_ptr<Other>& sp);
    shared_ptr& operator=(shared_ptr&& sp);
    template<class Other> 
        shared_ptr& operator=(shared_ptr<Other>&& sp);
    template<class Other> 
        shared_ptr& operator=(auto_ptr< Other >&& ap);
    template <class Other, class D> 
        shared_ptr& operator=(const unique_ptr< Other, D>& up) = delete;
    template <class Other, class D>
        shared_ptr& operator=(unique_ptr<Other, D>&& up);
    void swap(shared_ptr& sp);
    void reset();
    template<class Other>
        void reset(Other *ptr);
    template<class Other, class D>
        void reset(Other *ptr, D dtor);
    template<class Other, class D, class A>
        void reset(Other *ptr, D dtor, A alloc);
    Ty *get() const;
    Ty& operator*() const;
    Ty *operator->() const;
    long use_count() const;
    bool unique() const;
    operator bool() const;

    template<class Other>
        bool owner_before(shared_ptr<Other> const& ptr) const;
    template<class Other>
        bool owner_before(weak_ptr<Other> const& ptr) const;
    template<class D, class Ty> 
        D* get_deleter(shared_ptr<Ty> const& ptr);
};

매개 변수

  • Ty
    공유 포인터에 의해 제어 되는 형식입니다.

  • Other
    형식 인수가 포인터에 의해 제어입니다.

  • ptr
    복사 포인터입니다.

  • D
    Deleter의 유형을 지정 합니다.

  • A
    할당자 형식입니다.

  • dtor
    Deleter입니다.

  • alloc
    할당자입니다.

  • sp
    복사 또는 이동 하려면 스마트 포인터입니다.

  • wp
    복사 또는 이동 하려면 약한 포인터입니다.

  • ap
    복사 또는 이동 하려면 자동 포인터입니다.

  • up
    고유 이동 포인터입니다.

설명

템플릿 클래스 참조 리소스를 관리 하는 횟수를 사용 하는 개체를 설명 합니다.A shared_ptr 개체를 효과적으로 보유에 대 한 포인터 리소스를 소유 하 고 있거나 null 포인터를 보유 합니다.둘 이상의 리소스를 소유할 수 있습니다 shared_ptr 개체입니다. 때 마지막으로 shared_ptr 는 특정 리소스를 소유 하는 개체가 소멸 될, 리소스를 해제 합니다.

A shared_ptr 다시 할당 하거나 다시 설정할 때 리소스를 소유 하는 작업을 중지 합니다.

템플릿 인수 Ty 를 제외 하 고 불완전 한 형식의 특정 멤버 함수를 언급 한 것 처럼 될 수 있습니다.

경우는 shared_ptr<Ty> 에서 리소스 포인터 형식의 개체가 생성 G* 나는 shared_ptr<G>, 포인터 형식 G* 변환할 수 있어야 Ty*.그렇지 않으면 코드가 컴파일되지 않습니다.예를 들면 다음과 같습니다.

class F {};
class G : public F {};

shared_ptr<G> sp0(new G);   // okay, template parameter G and argument G*
shared_ptr<G> sp1(sp0);     // okay, template parameter G and argument shared_ptr<G>
shared_ptr<F> sp2(new G);   // okay, G* convertible to F*
shared_ptr<F> sp3(sp0);     // okay, template parameter F and argument shared_ptr<G>
shared_ptr<F> sp4(sp2);     // okay, template parameter F and argument shared_ptr<F>
shared_ptr<int> sp4(new G); // error, G* not convertible to int*
shared_ptr<int> sp5(sp2);   // error, template parameter int and argument shared_ptr<F>

A shared_ptr 개체를 소유 하는 리소스:

  • 해당 리소스에 대 한 포인터와 생성 된 경우

  • 생성 된 경우는 shared_ptr 해당 리소스를 소유 하는 개체

  • 생성 된 경우는 weak_ptr Class 해당 리소스를 가리키는 개체 또는

  • 사용 하 여 해당 리소스의 소유권을 할당 하는 경우 shared_ptr::operator= 멤버 함수를 호출 하 여 shared_ptr::reset.

shared_ptr 리소스를 소유 하는 개체의 제어 블록을 공유 합니다.제어 블록을 보유 합니다.

  • 수가 shared_ptr 리소스를 소유 하는 개체

  • 수가 weak_ptr 리소스를 가리키는 개체

  • 있는 경우에 해당 리소스에 대해 deleter,

  • 있는 경우 제어 블록에 대 한 사용자 지정 할당자.

A shared_ptr 널 포인터를 사용 하 여 초기화 되는 개체의 제어 블록 있고 비어 있지 않습니다.후에 shared_ptr 개체는 리소스를 해제 하 고 해당 리소스를 더 이상 소유.후에 weak_ptr 개체는 리소스를 해제 하 고 해당 리소스를 더 이상 가리키지.

때 수 shared_ptr 개체 자체 리소스 0이 됩니다, 삭제 또는 원래 리소스 소유권을 만든 방법에 따라 사용자가 있는 deleter에 해당 주소를 전달 하 여 리소스 해제 됩니다.때 수가 shared_ptr 리소스를 소유 하는 개체는 0, 고 수가 weak_ptr 개체를 가리키는 리소스는 0, 제어 블록 해제 되 있는 경우 제어 블록에 대 한 사용자 지정 할당자를 사용 합니다.

shared_ptr 개체 리소스가 없는 있고 제어 블록이 없습니다.

멤버 함수를 포함 하는 함수 개체는 deleter입니다 operator().해당 형식을 생성, 복사 및 복사 생성자와 소멸자가 예외를 throw 해야 합니다.메서드 매개 변수를 삭제할 개체를 받아들입니다.

일부 함수는 결과의 속성을 정의 하는 인수 목록을 사용 shared_ptr<Ty> 또는 weak_ptr<Ty> 개체입니다.인수 목록에서 여러 가지 방법으로 지정할 수 있습니다.

인수-결과 개체는 빈 shared_ptr 개체 또는 빈 weak_ptr 개체입니다.

ptr-형식의 포인터를 Other* 리소스를 관리할 수 있습니다.Ty완료 하는 형식 이어야 합니다.(제어 블록을 할당할 수 있기 때문에) 함수가 실패 하면 식을 계산 delete ptr.

ptr, dtor-형식의 포인터를 Other* 관리 해야 하는 리소스 및 해당 리소스에 대 한 deleter.(제어 블록을 할당할 수 있기 때문에) 그렇지 않으면 호출 dtor(ptr), 잘 정의 되어 있어야 합니다.

ptr, dtor, alloc-형식의 포인터를 Other* 관리 해야 하는 리소스, 해당 리소스를 및 할당 하 고 해제 해야 하는 모든 저장소를 관리 하는 할당자는 deleter.(제어 블록 할당할 수) 함수가 실패할 경우 호출 dtor(ptr), 잘 정의 되어 있어야 합니다.

sp-는 shared_ptr<Other> 관리 되는 리소스를 소유 하는 개체입니다.

wp-는 weak_ptr<Other> 관리 되는 리소스를 가리키는 개체입니다.

ap-는 auto_ptr<Other> 리소스를 관리할 수에 대 한 포인터를 보유 하는 개체입니다.함수 호출이 성공 하면 ap.release(). 그렇지 않으면 나갈 ap 변경 합니다.

모든 경우에 포인터 형식 Other* 수 있어야 Ty*.

스레드로부터의 안전성

여러 스레드에서 읽을 수 있고 다른 쓸 shared_ptr 동시에, 소유권을 공유 복사본 개체는 경우에 개체입니다.

Members

Bb982026.collapse_all(ko-kr,VS.110).gif생성자

shared_ptr::shared_ptr

shared_ptr를 생성합니다.

shared_ptr::~shared_ptr

소멸 된 shared_ptr.

Bb982026.collapse_all(ko-kr,VS.110).gif메서드

shared_ptr::element_type

요소의 형식입니다.

shared_ptr::get

소유한 리소스의 주소를 가져옵니다.

shared_ptr::owner_before

이 경우 true를 반환 합니다 shared_ptr 전에 주문 (또는 보다 작은) 제공 된 포인터입니다.

shared_ptr::reset

소유한 리소스를 교체 합니다.

shared_ptr::swap

두 맞바꿉니다 shared_ptr 개체입니다.

shared_ptr::unique

고유 리소스를 소유 하는 경우 테스트입니다.

shared_ptr::use_count

리소스 소유자의 번호를 계산합니다.

Bb982026.collapse_all(ko-kr,VS.110).gif연산자

shared_ptr::operator boolean-type

소유는 리소스가 존재 하는지 테스트 합니다.

shared_ptr::operator*

지정 된 값을 가져옵니다.

shared_ptr::operator=

소유한 리소스를 바꿉니다.

shared_ptr::operator->

포인터를 지정 된 값을 가져옵니다.

요구 사항

헤더: <memory>

네임 스페이스: std

참고 항목

참조

weak_ptr Class

표준 C++ 라이브러리에서 스레드로부터의 안전성

기타 리소스

<memory> 멤버