IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Spécialisation de default_delete


Sujet :

C++

  1. #1
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut 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 : 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 ?

  2. #2
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    - specialiser les templates de std est possible:

    A program may add a template specialization
    for any standard library template to namespace std only if the declaration depends on a user-defined type
    and the specialization meets the standard library requirements for the original template and is not explicitly
    prohibited.

    - j'ai pas vu d'interdiction pour default_delete

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Pourquoi n'utilises-tu pas le deleter d'unique_ptr ?

  4. #4
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    Parce que c’est aussi simple de surcharger le default_delete, et qu’il n’y a pas de risque d’oublier le deleter à la création du unique_ptr.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 24/08/2005, 15h36
  2. Réponses: 6
    Dernier message: 14/08/2005, 13h33
  3. Réponses: 2
    Dernier message: 07/07/2005, 15h23
  4. Proposition trop spécialisée ?
    Par szdavid dans le forum Emploi
    Réponses: 7
    Dernier message: 04/05/2005, 16h07
  5. Distribution spécialisée apache ?
    Par FRANCKYIV dans le forum Développement
    Réponses: 5
    Dernier message: 23/10/2003, 15h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo