C++ · Intermediário · Inglês · Técnico
weak pointer
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 morreuExemplos
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