Sobes.tech
Junior — Middle

Quais são as variedades de ponteiros inteligentes em C++?

sobes.tech IA

Resposta da IA

Em C++, existem várias principais variedades de ponteiros inteligentes que ajudam a gerir o tempo de vida dos objetos e a prevenir fugas de memória:

  • std::unique_ptr — fornece propriedade exclusiva do objeto. O objeto é destruído quando unique_ptr sai do escopo. Não pode ser copiado, mas pode ser movido.

  • std::shared_ptr — implementa contagem de referências. Vários ponteiros podem possuir um mesmo objeto, que é destruído quando o último shared_ptr é eliminado.

  • std::weak_ptr — referência fraca a um objeto gerido por shared_ptr. Não afeta o tempo de vida do objeto, usado para prevenir referências cíclicas.

Exemplo de uso:

#include <memory>
#include <iostream>

int main() {
    std::unique_ptr<int> p1 = std::make_unique<int>(42);
    // std::unique_ptr<int> p2 = p1; // Erro de cópia
    std::unique_ptr<int> p2 = std::move(p1); // Movimento de propriedade

    std::shared_ptr<int> sp1 = std::make_shared<int>(100);
    std::shared_ptr<int> sp2 = sp1; // O contador de referências aumenta

    std::weak_ptr<int> wp = sp1; // Não aumenta o contador de referências

    std::cout << *sp2 << std::endl; // 100
}