Surdefinition operateurs c++

Résolu/Fermé
hamed01 Messages postés 207 Date d'inscription lundi 30 juin 2008 Statut Membre Dernière intervention 22 juillet 2011 - 17 janv. 2010 à 12:29
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 - 17 janv. 2010 à 17:09
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.

3 réponses

loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
17 janv. 2010 à 16:43
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
hamed01 Messages postés 207 Date d'inscription lundi 30 juin 2008 Statut Membre Dernière intervention 22 juillet 2011 24
17 janv. 2010 à 16:56
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
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
17 janv. 2010 à 17:09
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