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

Langage C++ Discussion :

Surcharge de new/delete mais limité a un namespace.


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut Surcharge de new/delete mais limité a un namespace.
    C'est une idée de feature du C++ qui m'est apparu plusieurs fois évidente (et visiblement je suis pas le seul) mais qui visiblement n'existe pas, donc je voudrais savoir si il y a un problème intrinsèque avec le principe que je ne verrais pas.

    L'idée est simple : actuellement nous ne pouvons surcharger les fonctions new et delete qu'au niveau
    - du namespace global
    - d'une classe.

    Cela est assez contraignant pour des tas de raisons déjà discutées.
    Une manière peut être efficace de régler le probleme (mais qui est interdite aujourd'hui) serait de pouvoir surcharger ces fonctions mais au niveau du namepsace.

    C'est à dire permettre d'avoir un monnamespace::new() qui ne soit appelé que pour tout ce qui est contenu dans ce namespace ( après inclusion de la déclaration du new/delete evidemment).

    De cette manière, on peut potentiellment avoir une allocation customisée pour tout une bibliothèque par exemple, sans avoir a utiliser d'héritage de classe pour surcharger new/delete dans les classes de base.

    Est-ce que ça vous parait choquant? Est-ce qu'il y a un probleme qui vous semble fondamental? Peut être que le nesting de namespace poserai des problèmes ou ça serait un détail d'implémentation? De loin ça n'a pas l'air bien compliqué à implémenter (ça ressemble a une surcharge "classique") mais peut être qu'il y a une implication que je ne vois pas?

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Cela ne me paraitrait pas forcément choquant, mais je verrais quand même deux problèmes majeurs :

    Au niveau de l'imbrication des espaces de noms, tu forcerais, effectivement, l'utilisation de la surcharge dans l'espace de noms imbriqué. Cela peut avoir du sens, ou non

    Ensuite, il y a le problème de la directive using namespace : Tant qu'elle n'est pas utilisée, tu n'auras pas de problème particulier, mais, étant donné qu'elle peut être utilisée à peu près n'importe où, tu risques, dans le meilleur des cas, d'avoir un conflit entre les différentes versions et, dans le pire des cas, d'utiliser une version non adaptée.

    C'est sans doute pour cela que la feature n'est pas permise par la norme, non

    Il ne faut pas non plus oublier que new et delete ne sont pas des fonctions "comme les autres": ce sont des opérateurs

    Et puis, pour être honnête, les opérateurs new et delete sont de parfait candidat à la création de politiques
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut
    En fait je pensais plutot que dans le cas ou on surcharge new/delete dans un namespace, il n'y a que les classes déclarées DANS le namespace qui l'utiliseraient par défaut comme new/delete global. Ca serait (encore une fois du coup) un cas spécial.


    Hmmm... du coup effectivement c'est pas très clair quand on tente d'instancier une classe dans un namespace avec un allocateur maison ...

    Il faudrait de toutes façons des règles spéciales.

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par Klaim Voir le message
    En fait je pensais plutot que dans le cas ou on surcharge new/delete dans un namespace, il n'y a que les classes déclarées DANS le namespace qui l'utiliseraient par défaut comme new/delete global. Ca serait (encore une fois du coup) un cas spécial.
    Oui, oui, je l'avais bien compris ainsi...

    Mais je voulais surtout attirer l'attention sur le fait qu'il faut tenir compte des règles existantes lorsque l'on veut en ajouter une nouvelle.

    On peut, éventuellement, adapter l'existant, mais il faut alors veiller à garder malgré tout la rétro compatibilité, et cela devient assez facilement un "casse tête chinois"
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut
    Effectivement, ça y est maintenant je ne vois plus cela comme quelque chose d'evident.

    De loin, j'ai l'impression qu'on pourrait faire quelque chose d'assez orthogonal pour etre compatible avec l'existant si on a une feature du même genre au niveau des futures "modules".

    Future trop lointain, sans doute.

  6. #6
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 34
    Par défaut
    bonjour,

    personellement, c'est vrai que je ne l'ai pas fait dans un namespace,

    par contre je le fait par classe ce qui par contre est simple.
    ensuite, une technique très détournée qui n'est pas aussi pratique (mais qui par contre ne pause pas de problème de compatibilité) est de créer un object de base sur lequel new et delete sont redéfinit et d'en hériter de base.

    ou alors se faire une macro genre USE_MY_NEW_DEL (un peu comme si tu faisait QOBECT dans qt) et de le mettre dans chaque classe ou tu veut redéfinir cette propriété.

    bon ca ne le fait pas par namespace, mais en effet un namespace doit etre compatible avec ses namespaces parents et ce ne serait probablement plus vrai si on pouvais le faire par namespace.

Discussions similaires

  1. Surcharge de new / delete et Memory Manager
    Par LittleWhite dans le forum C++
    Réponses: 11
    Dernier message: 18/10/2010, 23h56
  2. new et delete, mais où?
    Par juloss dans le forum C++
    Réponses: 18
    Dernier message: 02/09/2008, 11h25
  3. intrigue sur la surcharge du new et delete
    Par swirtel dans le forum C++
    Réponses: 12
    Dernier message: 07/09/2006, 15h23
  4. [Débutant]Constructeur et new/delete
    Par Geolem dans le forum C++
    Réponses: 5
    Dernier message: 02/12/2005, 21h11
  5. Namespace et surcharge operator new/delete
    Par ZeLegolas dans le forum C++
    Réponses: 11
    Dernier message: 26/07/2005, 13h55

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