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!







Répondre avec citation










Partager