Surdefinition operateurs c++

Résolu
hamed01 Messages postés 212 Statut Membre -  
loupius Messages postés 789 Statut Membre -
Bonjour,
Je programme en C++
Je voudrais surdefinir l'operateur new pour compter le nombre de variables dynamiques alloués.
Après recherches, je ne trouve toujours pas.
Est-il possible de surdefinir cet opérateur? Si oui comment, avec quelle fonction???
Merci d'avance.
Configuration: Windows Vista
Safari 532.0

3 réponses

  1. loupius Messages postés 789 Statut Membre 148
     
    Un exemple vaut mieux qu'un long discours:
    #include <cstdlib>
    #include <iostream>
    using namespace std;
    
    class Objet
    {
      public:
        static int numObjet;
        void* operator new(size_t tailleObjet)
          { numObjet++; return (malloc(tailleObjet)); }
        void  operator delete(void* p)
          { numObjet--; }
      private:
        int var;
    };
    
    int Objet::numObjet;
    
    int main(int argc, char *argv[])
    {
      Objet* p1 = new Objet;
      cout << "numObjet = " << Objet::numObjet << endl;
      Objet* p2 = new Objet;
      cout << "numObjet = " << Objet::numObjet << endl;
      delete p2;
      cout << "numObjet = " << Objet::numObjet << endl;
      Objet* p3 = new Objet;
      cout << "numObjet = " << Objet::numObjet << endl;
      delete p3;
      cout << "numObjet = " << Objet::numObjet << endl;
      delete p1;
      cout << "numObjet = " << Objet::numObjet << endl;
      return EXIT_SUCCESS;
    }
    
    [loupius@p3000]$ g++ -Wall essai.cpp
    [loupius@p3000]$ ./a.out
    numObjet = 1
    numObjet = 2
    numObjet = 1
    numObjet = 2
    numObjet = 1
    numObjet = 0
    [loupius@p3000]$
    Ceci est un mauvais exemple car on peut faire plus simple avec le constructeur, mais cet exemple fonctionne.
    D'autre part, recherche des infos car il y a beaucoup de choses à savoir et qui ne sont pas dites explicitement dans cet exemple.
    Bonne continuation.
    1
  2. hamed01 Messages postés 212 Statut Membre 24
     
    Merci
    Je n'aurai pas imaginé le prototype: void* operator new(size_t tailleObjet)
    surtout avec l'espace entre operator et new :p
    Tu m'enlève une épine du pied.
    Allez merci et a +
    0
  3. loupius Messages postés 789 Statut Membre 148
     
    surtout avec l'espace entre operator et new
    Ben je vois pas trop comment le compilateur pourrait s'y retrouver; cela ne provoquerait pas d'erreur mais le nouveau 'new' ne serait pas appellé pas plus que la fonction 'operatornew'. Pour ce qui est du 'void*' et du paramètre 'size_t', c'est obligatoire avec 'new'.
    Bonne réflexion.
    0