Sobes.tech
Junior — Middle

Usou std::weak_ptr nos seus projetos para gerir o tempo de vida dos objetos?

sobes.tech IA

Resposta da IA

Sim, std::weak_ptr é utilizado para gerir o tempo de vida dos objetos juntamente com std::shared_ptr, para evitar referências circulares que possam levar a fugas de memória.

std::weak_ptr não possui o objeto, apenas observa-o. Isso permite verificar se o objeto existe antes de acessá-lo, usando o método lock(), que retorna um std::shared_ptr se o objeto ainda estiver vivo.

Exemplo de uso:

#include <iostream>
#include <memory>

struct Node {
    std::shared_ptr<Node> next;
    std::weak_ptr<Node> prev; // weak_ptr para evitar ciclo
};

int main() {
    auto first = std::make_shared<Node>();
    auto second = std::make_shared<Node>();

    first->next = second;
    second->prev = first; // weak_ptr não aumenta o contador de referências

    if (auto prevPtr = second->prev.lock()) {
        std::cout << "O nó anterior está vivo" << std::endl;
    } else {
        std::cout << "O nó anterior expirou" << std::endl;
    }
}

Dessa forma, std::weak_ptr ajuda a gerenciar de forma segura o tempo de vida dos objetos e a evitar problemas de memória.