Bonjour à tous,
je lisais récemment l'article de Andreas et Masur sur les allocateurs et je suis allé voir l'implémentation de l'allocateur par défaut de la STL (gcc-g++-4.6.3.tar.gz pour être exact).
Dans le fichier d'en-tête allocator.h, on y trouve bien tout ce qui est expliqué dans l'article (typedef, spécialisation pour le type void, ...). Jusque ici, tout va bien... Puis apparaissent les quelques lignes suivantes:
Les instanciations spécialisées pour les types char et wchar_t apparaissent dans le fichier allocator-inst.cc,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 // Inhibit implicit instantiations for required instantiations, // which are defined via explicit instantiations elsewhere. #if _GLIBCXX_EXTERN_TEMPLATE extern template class allocator<char>; extern template class allocator<wchar_t>; #endif
La seule conséquence que je vois à ces spécialisations particulières est d'empêcher l'utilisateur de spécialiser lui-même les allocateurs pour char et pour wchar_t.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 namespace std { template class allocator<char>; template class allocator<wchar_t>; } // namespace std
- Est-ce le cas ou bien n'ai-je rien compris?
- Y a-t-il d'autres conséquences/avantages à faire cela?
- Pourquoi ne faire cela que pour les type char et wchar_t et pas pour d'autres types de base (int, float, ...)?
Mes questions sont peut-être naïves (désolé dans ce cas) mais j'aimerais bien comprendre ce qui motive ce choix pour les développeurs de la STL. Si certains peuvent éclairer ma lanterne, merci d'avance!
Partager