Pergunta

Todos nós sabemos que os ponteiros RAW precisa ser envolvido em alguma forma de ponteiro inteligente para obter gerenciamento de memória seguro de exceção. Mas quando se trata de recipientes de ponteiros a questão torna-se mais espinhoso.

Os recipientes std insistir no objeto contido sendo copyable assim Isto exclui o uso de std :: auto_ptr, embora você ainda pode usar boost :: shared_ptr etc.

Mas há também alguns recipientes impulso projetados explicitamente aos ponteiros suportar com segurança:
Consulte Pointer Container Biblioteca

A questão é: Em que condições se deve preferir usar os ptr_containers sobre um recipiente de smart_pointers?

boost::ptr_vector<X>

or

std::vector<boost::shared_ptr<X> >
Foi útil?

Solução

recipientes ponteiro impulso têm estrita propriedade sobre os recursos que possuem. A std :: vector > compartilhou propriedade. Existem razões pelas quais que podem ser necessárias, mas no caso não é, eu seria padrão para boost :: ptr_vector . YMMV.

Outras dicas

firme sobre: ??smart ponteiros são um bom método de lidar com a gestão de recursos, mas não o único. Eu concordo que você vai ver muito poucos ponteiros crus em código bem escrito C ++, mas na minha experiência que você não vê que muitas ponteiros inteligentes também. Há uma abundância de aulas perfeitamente exceção-safe implementado usando recipientes de ponteiros crus.

Bem, sobrecarga é um caso.

Um vetor de ponteiros compartilhados vai fazer um monte de cópia estranho que envolve a criação de um novo ponteiro inteligente, incrementando uma referência, diminuindo uma referência, etc em um redimensionamento. Tudo isso é evitado com um recipiente de ponteiro.

Requer profiling para garantir as operações de contêineres são o gargalo embora:)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top