Sobes.tech
Junior — Middle

Quais são as principais dificuldades ou armadilhas relacionadas ao uso de ponteiros inteligentes na programação?

sobes.tech IA

Resposta da IA

As principais dificuldades ao usar ponteiros inteligentes:

  • Referências cíclicas: se dois objetos se possuírem mutuamente através de shared_ptr, eles nunca serão libertados, causando uma fuga de memória. Para resolver, usa-se weak_ptr.
  • Uso incorreto de unique_ptr: tentar copiar um unique_ptr resultará num erro, deve-se usar a transferência.
  • Sobrecarga de recursos: a criação e destruição frequente de ponteiros inteligentes pode afetar o desempenho.
  • Propriedade não óbvia: com um design incorreto, é difícil entender quem possui o objeto e quando será destruído.

Exemplo de referência cíclica:

struct B; 
struct A {
    std::shared_ptr<B> b_ptr;
};
struct B {
    std::shared_ptr<A> a_ptr;
};

// Isto criará um ciclo, os objetos não serão eliminados automaticamente.

Para evitar, usa-se std::weak_ptr numa das partes.