Spécialisation de default_delete
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:
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 ?