Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Introdução a Ponteiros Fracos | Ponteiros Fracos
C++ Smart Pointers
course content

Conteúdo do Curso

C++ Smart Pointers

C++ Smart Pointers

1. Introdução a Ponteiros Inteligentes
2. Ponteiros Únicos
3. Ponteiros Compartilhados
4. Ponteiros Fracos
5. Tópicos Avançados

book
Introdução a Ponteiros Fracos

O ponteiro inteligente std::weak_ptr não possui o objeto para o qual aponta. Isso essencialmente significa que um ponteiro fraco não aumenta a contagem de referência do objeto.

Um std::weak_ptr permite o acesso a um objeto gerenciado por ponteiros compartilhados sem estender sua vida útil. Se todos os ponteiros compartilhados saírem do escopo, o objeto é deletado, mesmo que ainda exista um ponteiro fraco. Isso é útil para observar objetos compartilhados sem impedir sua desalocação.

cpp

main

copy
12345678910111213141516171819
#include <iostream> #include <memory> struct Resource { Resource() { std::cout << "Resource created\n"; } ~Resource() { std::cout << "Resource destroyed\n"; } }; int main() { std::shared_ptr<Resource> sp1 = std::make_shared<Resource>(); std::weak_ptr<Resource> wp = sp1; // Weak pointer does not increase ref count std::cout << "Shared pointer going out of scope...\n"; sp1.reset(); // Resource is deleted if (wp.expired()) std::cout << "Resource no longer exists\n"; }

O Ciclo de Vida de um Weak Pointer

Weak pointers são observadores, eles podem acessar um objeto, mas não estendem seu tempo de vida.

Seu ciclo de vida depende de shared pointers. Quando o último shared pointer é destruído, o objeto é desalocado e o weak pointer expira. Ele ainda existe, mas se torna vazio.

question mark

Se 10 shared pointers e 1 weak pointer referenciam um recurso, o que acontece quando todos os shared pointers saem de escopo?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 4. Capítulo 1
Sentimos muito que algo saiu errado. O que aconteceu?
some-alt