Bonjour à tous,
Devant utiliser dans un projet une librairie C, fournissant ses propres fonctions d’allocation/désallocation pour certains objets, je suis rapidement arrivé au besoin de wrapper celles-ci pour avoir du code exception-safe.
J’ai donc utilisé des unique_ptr pour stocker mes objets alloués, et spécialisé la structure std::default_delete de la sorte :
Question :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 template<> struct default_delete<mon_type_c> { void operator()(mon_type_c* val) { if(val) mot_type_free(val) }
- est-ce une bonne idée. Il me semblait qu’on n’était pas trop censé rajouter des choses dans le namespace std (bien que là, je puisse le localiser à un seul fichier, merci pimpl).
- quid de shared_ptr (il m’a semblé voir qu’il n’utilise pas default_delete par défaut mais seulement l’operator delete → la construction devra donc l’utiliser explicitement)
- y a-t-il une autre méthode recommandée si celle-ci n’est pas la bonne ?
Partager