Classe weak_ptr
Envolve um ponteiro fraco associado.
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;
};
Parâmetros
- Ty
O tipo controlado pelo ponteiro fraco.
Comentários
A classe do modelo descreve um objeto que aponta para um recurso que é gerenciada por um ou mais objetos de Classe shared_ptr . weak_ptr objetos desse ponto em um recurso não afeta a contagem de referência de recurso. Portanto, quando o objeto mais recente de shared_ptr que gerencia esse recurso é destruído o recurso será liberado, mesmo se houver objetos de weak_ptr que apontam para esse recurso. Isso é essencial para impedir ciclos em estruturas de dados.
Pontos de objeto de weak_ptr a um recurso se foi construído de um objeto de shared_ptr que possui esse recurso, se foi construído de um objeto de weak_ptr que aponta para esse recurso, ou se esse recurso foi alocado a weak_ptr::operator=. Um objeto de weak_ptr não fornece acesso direto ao recurso apontados por. O código que precisa usar o recurso faz isso por meio de um objeto de shared_ptr que possui esse recurso, criado chamando a função de membro weak_ptr::lock. Um objeto de weak_ptr expirou enquanto o recurso que aponta foi liberado porque todo o shared_ptr objeto que é o proprietário do recurso foi destruído. A chamada lock em um objeto de weak_ptr que expirou cria um objeto vazio de shared_ptr.
Um objeto vazio de weak_ptr não aponta para nenhum recurso e não tem nenhum pacote de controle. A função de membro lock retorna um objeto vazio de shared_ptr.
Um ciclo ocorre quando duas ou mais recursos controlados por objetos de shared_ptr manter mutuamente objetos de referência de shared_ptr . Por exemplo, uma lista vinculada circular com três elementos têm um nó N0de início; esse nó contém um objeto que possui o nó seguir, N1de shared_ptr ; esse nó contém um objeto que possui o nó seguir, N2de shared_ptr ; esse nó, por sua vez, contém um objeto que possui o nó principal, N0de shared_ptr , fechando o ciclo. Nessa situação, nenhuma das contagens de referência nunca serão zero, e os nós no ciclo não serão liberados. Para eliminar o ciclo, o último nó N2 deve manter um objeto de weak_ptr que aponta para N0 em vez de um objeto de shared_ptr . Desde que o objeto de weak_ptr não possuir N0 não afeta a contagem de referência de N0 , e quando a última referência de programa ao nó principal é destruída os nós na lista também serão destruídos.
Membros
Construtores
Constrói um weak_ptr. |
Métodos
O tipo de elemento. |
|
Testa se a propriedade expirou. |
|
Obtém a propriedade exclusiva de um recurso. |
|
Retorna true se esse weak_ptr é ordenado antes ou (menor que) do ponteiro fornecido. |
|
Recursos de propriedade de versões. |
|
Alterna dois objetos weak_ptr. |
|
Número das contagens de objetos designados de shared_ptr . |
Operadores
Recurso de propriedade Substitui. |
Requisitos
Cabeçalho: <memória>
Namespace: std