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-seweak_ptr. - Uso incorreto de
unique_ptr: tentar copiar umunique_ptrresultará 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.