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 :

Compiler la surcharge de l'opérateur new


Sujet :

Langage C++

  1. #1
    Nouveau candidat au Club
    Inscrit en
    Juin 2010
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 1
    Par défaut Compiler la surcharge de l'opérateur new
    Bonjour à tous,

    Je veux surcharger tous mes opérateurs new pour pouvoir stocker dans une structure toutes les allocations de mémoire. Bien évidement pour qu'il y ai un intérêt, je fais la même chose avec delete.

    Bref venons au fait, j'ai trouvé pas mal de code identique à ce que j'ai préparé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    dans le .h
    #include <cstddef>
     
    void* operator new (size_t sStruct, const char* sFichier, int iLigne);
    void* operator new [] (size_t sStruct, const char* sFichier, int iLigne);
     
    //#define new new(__FILE__,__LINE__)
    #define new DEBUG_NEW
    #define DEBUG_NEW new(__FILE__,__LINE__)
     
    dans le .cpp
    void * operator new (size_t sStruct, const char* cFichier, int iLigne)
    { malloc ... blablabla }
     
    void* operator new[] (size_t sStruct, char* cFichier, int iLigne)
    { blablabla ... free }
    Tel quel, j'ai l'erreur suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    g++  -g    -D_LINUX   -I/home/xxx/Fonctions/ -I/usr/dt/include -I/usr/openwin/include  -c -o Out/memory.cpp.o  /home/xxx/Fonctions/memory.cpp
    > memory.cpp:4: erreur: declaration of 'operator new' as non-function
    Si j'enlève les paramètres const char* sFichier et int iLigne, je n'ai aucun problème particulier de compilation. Toutefois, pour que mon code ai un intérêt il faut absolument que je vois où sont alloués les éléments.

    Suite à quelques recherches sur le net, j'avais rajouté #include <cstddef>. De plus, j'ai trouvé de nombreuses références à #define new DEBUG_NEW
    #define DEBUG_NEW new(__FILE__,__LINE__)
    Ca devrait fonctionner comme partout. Mais pas chez moi. Pourquoi et que changer?

    D'avance, Merci

    PS: Je suis sous Unix: gcc-4.1.2

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut et bienvenu,
    Les #define défini à la fin du .h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #define new DEBUG_NEW
    #define DEBUG_NEW new(__FILE__,__LINE__)
    viennent perturber la définition de la fonction dans le .cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void * operator new (size_t sStruct, const char* cFichier, int iLigne)
    { malloc ... blablabla }
    // devient après le preprocessing : 
    void * operator new("memory.cpp",10) (size_t sStruct, const char* cFichier, int iLigne)
    Cf Les opérateurs new, new[], delete et delete[] dans le tuto de Laurent Gomilla. Tu remarqueras que les fonctions sont inline et redirigent vers l'implémentation effective dans un objet allocateur.

Discussions similaires

  1. Surcharge de l'opérateur new
    Par asaleth dans le forum C++
    Réponses: 9
    Dernier message: 30/03/2015, 21h18
  2. Surcharge de l'opérateur new
    Par :Bronsky: dans le forum C++
    Réponses: 17
    Dernier message: 27/10/2010, 21h33
  3. surcharger l'opérateur NEW
    Par spiner900 dans le forum Langage
    Réponses: 2
    Dernier message: 22/04/2010, 16h38
  4. Réponses: 2
    Dernier message: 17/10/2009, 20h49
  5. Surcharge de l'opérateur new
    Par asoka13 dans le forum C++
    Réponses: 4
    Dernier message: 09/05/2008, 12h44

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