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