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 :
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)
}
Question :
- 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 ?