Por que não há uma especialização std :: shared_ptr ?

O padrão fornece uma especialização de modelo de std::unique_ptr que chama corretamente o delete[] de seu destruidor:

 void func() { std::unique_ptr arr(new int[10]); ....... } 

Com std::shared_ptr esta especialização não está disponível, então é necessário fornecer um deleter que chame corretamente delete[] :

 void func() { // Usage shared_ptr array (new double [256], [](double* arr) { delete [] arr; } ); .............. } 

Isso é simplesmente um descuido? (da mesma forma que existe um std::copy_if ) ou existe uma razão?

   

    O LWG (Grupo de Trabalho de Bibliotecas do comitê C ++) considerou brevemente a possibilidade, mas a ideia não foi sem controvérsia. Embora a controvérsia fosse principalmente sobre um recurso adicionado à proposta shared_ptr que poderia ter sido descartada (aritmética em shared_ptr ).

    Mas, em última análise, a verdadeira razão real é que, embora tenha sido discutido, nunca houve uma proposta escrita real na frente do LWG para fazer isso. Nunca borbulhou a lista de prioridades de qualquer pessoa (incluindo a minha) o suficiente para colocar o tempo em escrever uma proposta.

    Conversas informais começaram recentemente sobre esse tópico entre alguns membros do LWG, e eu pessoalmente o criei. Mas ainda não há uma proposta escrita para isso. Eu acho que seria uma ferramenta adicional decente na checkbox de ferramentas. Se isso realmente acontecerá ou não, ninguém sabe.

    Atualizar

    O suporte à matriz para shared_ptr agora possui um TS de rascunho:

    http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4077.html

    Atualização (2017)

    Isso agora é suportado em C ++ 17. Veja o caso 3 de shared_ptr::shared_ptr()