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 quandounique_ptrsai 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 últimoshared_ptré eliminado. -
std::weak_ptr— referência fraca a um objeto gerido porshared_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
}