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

C++ Discussion :

Surcharge de l'opérateur new


Sujet :

C++

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 217
    Points : 107
    Points
    107
    Par défaut Surcharge de l'opérateur new
    Bonjour,

    Je voudrais savoir si c'est possible de récupérer le type d'un objet dans une surcharge de l'opérateur new

    par exemple voici un main ou je déclare un pointeur vers un int
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    int main( int argc, char** argv ) {
     
    	int* i = new int( 13 );
     
    	return 0;
     
    } // main()
    et voici ma surcharge de l'opérateur new
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    void* operator new( size_t size ) {
     
    	void* ptr = malloc( size );
    	// je veux récupérer le type de i
    	if( ptr == 0 ) { throw std::bad_alloc(); }
    	return ptr;
     
    } // operator new()
    merci

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

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 629
    Points : 30 692
    Points
    30 692
    Par défaut
    Salut,

    A vrai dire, je ne vois pas bien pourquoi tu voudrait récupérer le type de l'objet pour lequel tu demande l'allocation mémoire au moment de celle-ci...

    Mais bon, comme je suis bon prince, je t'invite à regarder la première partie du formidable tuto de Laurent Gomila traitant de la réalisation d'un moteur 3D...

    Il y explique, entre autres, comment surcharger l'operateur new, et tu pourras peut être t'en inspirer

  3. #3
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 217
    Points : 107
    Points
    107
    Par défaut
    Merci pour ta réponse mais le tuto ne me donne pas de solution. le but en faite c'est qu'a chaque fois que je cree un objet avec new, je le stock dans un tableau avec son type, le seul endroit ou je peux le faire est dans le new, mais je n'arrive pas a trouver de solution pour récuperer le type.

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

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 629
    Points : 30 692
    Points
    30 692
    Par défaut
    Attends, reprenons un peu depuis le début, si tu veux bien...

    Si tu crée un objet avec new, c'est soit parce que tu prévois un comportement polymorphique, soit parce que tu veux qu'il survive à la (portée de la) fonction qui l'a déclaré.

    Dans le premier cas, tu sais au moment où tu écrit ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     *Mere truc = new Derivee;
    quel est le type de ton objet, et le polymorphisme te permet de placer ton pointeur sur un objet de type dérivée, mais reconnu comme pointant sur un objet de type mère dans... un tableau de pointeurs de type Mere...

    Si, plus tard, tu souhaites pouvoir récupérer le type réel de ton objet, il existe des méthodes éprouvées, allant du dynamic_cast à l'utilisation d'un membre qui "sache" le type réel.

    Dans le second cas, et nous entrons alors dans un gestionnaire de mémoire comme celui indiqué dans le tuto, le type, pour parler crument, tu t'en fout royalement: ce qui compte, c'est de savoir la taille que ce type prend en mémoire, et ca... new le sait très bien (cf le tuto).

    Maintenant, je suis peut être un peu buté, et je n'ai peut être pas compris ton but réel... mais alors, réfléchis un peu sur ma signature

  5. #5
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 217
    Points : 107
    Points
    107
    Par défaut
    ok merci j ai trouvé mon bonheur

+ Répondre à la discussion
Cette discussion est résolue.

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. Compiler la surcharge de l'opérateur new
    Par mutagling dans le forum Langage
    Réponses: 1
    Dernier message: 24/06/2010, 07h24
  4. surcharger l'opérateur NEW
    Par spiner900 dans le forum Langage
    Réponses: 2
    Dernier message: 22/04/2010, 16h38
  5. namespace et opérateur new
    Par Sylvain Rousseau dans le forum C++
    Réponses: 3
    Dernier message: 06/01/2005, 23h24

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