ExpertiDict

C++ · Intermediário · Inglês · Técnico

weak pointer

wiːk ˈpɔɪntɚsubstantivo

std::weak_ptr observa um objeto gerenciado por shared_ptr sem aumentar a contagem de donos. Para usar o objeto, chama-se lock(), que devolve um shared_ptr ou nulo.

Onde usar

Resolve ciclos de referência, como filho que aponta para o pai, e caches que não devem manter objetos vivos. Em code review, aparece quando há shared_ptr dos dois lados de uma relação.

Em código

std::weak_ptr<int> w;
{
  auto s = std::make_shared<int>(9);
  w = s;
  if (auto p = w.lock()) std::cout << *p;
}
std::cout << w.expired();  // 1: objeto morreu

Exemplos

The child holds a weak pointer to its parent to avoid a cycle.

O filho guarda um weak pointer para o pai para evitar um ciclo.

Call lock on the weak pointer and check if the object is still alive.

Chame lock no weak pointer e veja se o objeto ainda está vivo.

Cuidado

Não acesse o objeto direto: weak_ptr não tem operator*, então sempre passe por lock() e verifique o resultado.

Sinônimos

weak_ptr

Veja também

Todos os termos de C++