64 votes

Pourquoi n'y a-t-il pas std :: shared_ptr <T[]> spécialisation?

La norme fournit une spécialisation de modèle de std::unique_ptr qui appelle correctement le delete[] de son destructeur:

 void func()
{
   std::unique_ptr< int[] > arr(new int[10]);

   .......
}
 

Avec std::shared_ptr cette spécialisation n'est pas disponible, il est donc nécessaire de fournir un suppresseur qui appelle correctement delete[] :

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

    ..............
}
 

Est-ce simplement un oubli? (de la même manière qu'il y a std::copy_if ) ou y a-t-il une raison?

70voto

Howard Hinnant Points 59526

Confiées au groupe de travail (Bibliothèque du Groupe de Travail du comité C++) brièvement examiné la possibilité, mais l'idée n'a pas été sans controverse. Bien que la polémique a été principalement sur une fonctionnalité ajoutée à l' shared_ptr<T[]> proposition qui pourrait avoir été larguée (arithmétique sur shared_ptr<T[]>).

Mais, finalement, le vrai de vrai raison est que si elle a été discuté, il n'a jamais été une réelle proposition écrite devant confiées au groupe de travail pour ce faire. Il n'a jamais bouillonnait de quelqu'un de la liste de priorité (y compris le mien) suffisamment à investir du temps dans la rédaction d'une proposition.

Des conversations informelles ont récemment commencé à nouveau sur ce sujet parmi les quelques LWG membres, et j'ai personnellement fait un prototype. Mais il n'y a toujours pas de proposition écrite pour elle. Je pense qu'il serait décent outil supplémentaire dans la boîte à outils. Si elle arrive un jour ou pas je vous laisse deviner.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X