Como posso ver, ponteiros inteligentes são amplamente utilizados em muitos projetos C ++ do mundo real.
Embora algum tipo de ponteiro inteligente seja obviamente benéfico para oferecer suporte a transferências de propriedade e RAII, também há uma tendência de usar ponteiros compartilhados por padrão , como uma forma de "coleta de lixo" , para que o programador não precise pensar muito na alocação. .
Por que os ponteiros compartilhados são mais populares do que integrar um coletor de lixo adequado como o Boehm GC ? (Ou você concorda que eles são mais populares que os GCs reais?)
Conheço duas vantagens dos GCs convencionais sobre a contagem de referência:
- Os algoritmos convencionais de GC não têm problemas com ciclos de referência .
- A contagem de referência é geralmente mais lenta que um GC adequado.
Quais são as razões para usar ponteiros inteligentes de contagem de referência?
std::unique_ptr
é suficiente e, como tal, tem zero de sobrecarga em relação aos ponteiros brutos em termos de desempenho em tempo de execução. Ao usar emstd::shared_ptr
qualquer lugar, você também obscureceria a semântica da propriedade, perdendo um dos principais benefícios de indicadores inteligentes que não sejam o gerenciamento automático de recursos - a compreensão clara da intenção por trás do código.