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
생성자
shared_ptr를 생성합니다. |
|
소멸 된 shared_ptr. |
메서드
요소의 형식입니다. |
|
소유한 리소스의 주소를 가져옵니다. |
|
이 경우 true를 반환 합니다 shared_ptr 전에 주문 (또는 보다 작은) 제공 된 포인터입니다. |
|
소유한 리소스를 교체 합니다. |
|
두 맞바꿉니다 shared_ptr 개체입니다. |
|
고유 리소스를 소유 하는 경우 테스트입니다. |
|
리소스 소유자의 번호를 계산합니다. |
연산자
소유는 리소스가 존재 하는지 테스트 합니다. |
|
지정 된 값을 가져옵니다. |
|
소유한 리소스를 바꿉니다. |
|
포인터를 지정 된 값을 가져옵니다. |
요구 사항
헤더: <memory>
네임 스페이스: std