Conteúdo do Curso
C++ Smart Pointers
C++ Smart Pointers
Criando e Usando Weak Pointers
Criando Weak Pointers
Você deve normalmente criar um std::weak_ptr
a partir de um std::shared_ptr
existente. Isso garante que o weak pointer observe um objeto que já está sendo gerenciado por pelo menos um shared pointer.
creating_weak_pointer
std::shared_ptr<int> p_shared = std::make_shared<int>(42); std::weak_ptr<int> p_weak(sharedPtr);
O std::weak_ptr
p_weak
é construído a partir de um std::shared_ptr
p_shared
existente. Isso significa que p_weak
não aumenta a contagem de referência de p_shared
, mas em vez disso observa o mesmo objeto gerenciado. A validade de p_weak
depende de p_shared
; se todas as instâncias de std::shared_ptr
que gerenciam o objeto forem destruídas, p_weak
expira e não pode mais ser usado para acessar o objeto diretamente.
Usando Weak Pointers
Para acessar um objeto gerenciado por um std::weak_ptr
, você deve primeiro convertê-lo para um std::shared_ptr
usando lock()
. Este método verifica se o objeto ainda está vivo e retorna um std::shared_ptr
para ele, caso contrário, retorna um std::shared_ptr
vazio.
Bloquear um weak pointer impede que o objeto seja destruído enquanto está em uso. Como std::weak_ptr
não contribui para a contagem de referências, acessar diretamente o objeto arriscaria usar uma instância destruída. Convertê-lo para um std::shared_ptr
aumenta a contagem de referências, garantindo que o objeto permaneça válido durante o uso.
converting
auto locked_shared = p_weak.lock(); if (locked_shared) // The object is alive, and you can use lockedSharedPtr to access it. else // The object has been deallocated, and lockedSharedPtr is empty.
Swipe to start coding
Complete o seguinte código para criar um std::weak_ptr
a partir de um std::shared_ptr
, convertê-lo de volta para um std::shared_ptr
e acessar com segurança o valor do objeto gerenciado.
Solução
solution
Obrigado pelo seu feedback!
Criando e Usando Weak Pointers
Criando Weak Pointers
Você deve normalmente criar um std::weak_ptr
a partir de um std::shared_ptr
existente. Isso garante que o weak pointer observe um objeto que já está sendo gerenciado por pelo menos um shared pointer.
creating_weak_pointer
std::shared_ptr<int> p_shared = std::make_shared<int>(42); std::weak_ptr<int> p_weak(sharedPtr);
O std::weak_ptr
p_weak
é construído a partir de um std::shared_ptr
p_shared
existente. Isso significa que p_weak
não aumenta a contagem de referência de p_shared
, mas em vez disso observa o mesmo objeto gerenciado. A validade de p_weak
depende de p_shared
; se todas as instâncias de std::shared_ptr
que gerenciam o objeto forem destruídas, p_weak
expira e não pode mais ser usado para acessar o objeto diretamente.
Usando Weak Pointers
Para acessar um objeto gerenciado por um std::weak_ptr
, você deve primeiro convertê-lo para um std::shared_ptr
usando lock()
. Este método verifica se o objeto ainda está vivo e retorna um std::shared_ptr
para ele, caso contrário, retorna um std::shared_ptr
vazio.
Bloquear um weak pointer impede que o objeto seja destruído enquanto está em uso. Como std::weak_ptr
não contribui para a contagem de referências, acessar diretamente o objeto arriscaria usar uma instância destruída. Convertê-lo para um std::shared_ptr
aumenta a contagem de referências, garantindo que o objeto permaneça válido durante o uso.
converting
auto locked_shared = p_weak.lock(); if (locked_shared) // The object is alive, and you can use lockedSharedPtr to access it. else // The object has been deallocated, and lockedSharedPtr is empty.
Swipe to start coding
Complete o seguinte código para criar um std::weak_ptr
a partir de um std::shared_ptr
, convertê-lo de volta para um std::shared_ptr
e acessar com segurança o valor do objeto gerenciado.
Solução
solution
Obrigado pelo seu feedback!