weak_ptr Class
약한 연결된에 대 한 포인터를 래핑합니다.
template<class Ty> class weak_ptr {
public:
typedef Ty element_type;
weak_ptr();
weak_ptr(const weak_ptr&);
template<class Other>
weak_ptr(const weak_ptr<Other>&);
template<class Other>
weak_ptr(const shared_ptr<Other>&);
weak_ptr& operator=(const weak_ptr&);
template<class Other>
weak_ptr& operator=(const weak_ptr<Other>&);
template<class Other>
weak_ptr& operator=(shared_ptr<Other>&);
void swap(weak_ptr&);
void reset();
long use_count() const;
bool expired() const;
shared_ptr<Ty> lock() const;
};
매개 변수
- Ty
약한 포인터에 의해 제어 되는 형식입니다.
설명
하나 이상의 관리 되는 리소스를 가리키는 개체를 설명 하는 템플릿 클래스 shared_ptr Class 개체입니다.weak_ptr 리소스를 가리키는 개체 참조 횟수가 자원의 영향을 주지 않습니다.따라서, 마지막으로 shared_ptr 해당 리소스를 관리 되는 개체가 소멸 될 경우에 리소스를 확보 되지 weak_ptr 개체가 해당 리소스를 가리키는.이 데이터 구조에서 사이클을 방지에 대 한 필수적입니다.
A weak_ptr 개체에서 생성 된 경우 리소스를 가리키는 있는 shared_ptr 에서 생성 된 경우 해당 리소스를 소유 하는 개체는 weak_ptr 해당 리소스를 가리키는 개체 또는 해당 리소스에 할당 된 weak_ptr::operator=.A weak_ptr 개체를 가리키는 리소스에 직접 액세스를 제공 하지 않습니다.코드 리소스를 사용 해야 하지 통해 지금 있는 shared_ptr 멤버 함수를 호출 하 여 만든 해당 리소스를 소유 하는 개체 weak_ptr::lock.A weak_ptr 개체가 있기 때문에 가리키는 리소스 해제 된 경우 만료 되었습니다 전부는 shared_ptr 리소스를 소유 하는 개체가 파괴 되었습니다.호출 lock 에 있는 weak_ptr 만료 된 개체는 빈 shared_ptr 개체를 만듭니다.
빈 weak_ptr 개체 모든 리소스를 가리키고 있지 있고 제어 블록이 없습니다.그 멤버 함수가 lock 빈 shared_ptr 개체를 반환 합니다.
둘 이상의 리소스에 의해 제어 되는 경우 주기가 발생 shared_ptr 상호 참조 개체를 보유 shared_ptr 개체입니다.예를 들어, 순환 연결 된 목록을 세 개의 요소가 있는 헤드 노드에 있는 N0. 해당 노드가 보유 하 고 있는 shared_ptr 다음 노드를 소유 하는 개체 N1. 해당 노드가 보유 하 고 있는 shared_ptr 다음 노드를 소유 하는 개체 N2. 해당 노드를 보유 한 shared_ptr 헤드 노드를 소유 하는 개체 N0, 주기를 닫기.이 상황에서 없음 참조 횟수 0이 적이 되 고 노드 주기에서 해제 되지 않습니다.주기의 마지막 노드를 제거 하기 위해 N2 개최 해야는 weak_ptr 개체를 가리키는 N0 대신에 shared_ptr 개체.이후는 weak_ptr 개체에서 소유 하지 않은 N0 영향을 주지 않습니다 N0의 참조 횟수 및 헤드 노드에 대 한 프로그램의 마지막 참조가 소멸 되 면 노드 목록에서도 소멸 됩니다.
Members
생성자
weak_ptr를 생성합니다. |
메서드
요소의 형식입니다. |
|
소유권 만료 되는 경우 테스트 합니다. |
|
자원의 단독 소유권을 가져옵니다. |
|
반환 true 이 경우 weak_ptr 전에 주문 (또는 보다 작은) 제공 된 포인터입니다. |
|
버전 리소스를 소유합니다. |
|
두 맞바꿉니다 weak_ptr 개체입니다. |
|
카운트 수를 지정 합니다. shared_ptr 개체입니다. |
연산자
대체 리소스를 소유합니다. |
요구 사항
헤더: <memory>
네임 스페이스: std