Compartilhar via


Classe weak_ptr

Quebra um ponteiro vinculado sem rigidez.

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 de modelo descreve um objeto que aponta para um recurso é gerenciado por um ou mais Classe shared_ptr objetos. The weak_ptr objetos que apontam para um recurso não afetam a contagem de referência do recurso. Assim, quando o último shared_ptr objeto que gerencia esse recurso é destruído o recurso será liberado, mesmo se não houver weak_ptr objetos apontando para esse recurso. Isso é essencial para evitar ciclos em estruturas de dados.

A weak_ptr objeto aponta para um recurso se ele foi construído a partir de um shared_ptr objeto que possui esse recurso se ele foi construído a partir de um weak_ptr objeto que aponta para esse recurso, ou se esse recurso foi atribuído a ele com weak_ptr::operador =. A weak_ptr objeto não fornece acesso direto para o recurso que ele aponta. Código que precisa usar o recurso faz isso por meio de um shared_ptr objeto que possui esse recurso, criado chamando a função de membro weak_ptr::bloquear. A weak_ptr objeto expirou quando o recurso ao qual ele aponta para foi liberado porque todos os shared_ptr objetos proprietários do recurso tiverem sido destruídos. De chamadalock em um weak_ptr objeto que tenha expirado cria um objeto shared_ptr vazio.

Um objeto weak_ptr vazio não aponta para todos os recursos e não possui nenhum bloco de controle.Sua função de membro lock Retorna um objeto shared_ptr vazio.

Um ciclo ocorre quando dois ou mais recursos controlados por shared_ptr objetos Isenção mutuamente referência shared_ptr objetos. Por exemplo, uma lista vinculada circular com três elementos tem um nó principal N0; Esse nó contém um shared_ptr objeto que possui o próximo nó N1; Esse nó contém um shared_ptr objeto que possui o próximo nó N2; nó, por sua vez, contém um shared_ptr objeto que possui o nó principal, N0, o ciclo de fechamento. Nessa situação, nenhum da referência de conta serão todos se torna zero e os nós no ciclo não serão liberados.Para eliminar o ciclo, o último nó N2 deve conter um weak_ptr objeto apontando para N0 em vez de um smart_ptr objeto. Desde o weak_ptr objeto não possui N0 Ela não afeta N0da contagem de referência e quando a última referência ao nó principal do programa é destruída os nós na lista também serão destruídos.

Requisitos

Cabeçalho:<memória>

Namespace: std::tr1

Consulte também

Referência

<memória>TR1)

Classe shared_ptr