Surdefinition operateurs c++

Résolu
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. 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.
    1. 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 +
      1. 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.