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 :

Surcharger un opérateur sans fuite de mémoire


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Surcharger un opérateur sans fuite de mémoire
    Je dois porter en C++ des méthodes mathématiques en C# mettant à profit la surcharge des opérateurs. Je ne souhaite surtout pas devoir les réanalyser, simplement les porter telles quelles, notamment pour en faciliter la mise à jour lorsque l'auteur en modifiera le source C#.

    Ex. C# de surcharge:

    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
    18
    19
    20
    21
    struct Vector
    {
        public float x, y, z;
     
        public Vector(float x, float y, float z)
        {
            this.x = x;
            this.y = y;
            this.z = z;
        }
     
        public static Vector operator +(Vector a, Vector b)
        {
            return new Vector(a.x + b.x, a.y + b.y, a.z + b.z);
        }
     
        public static Vector operator *(Vector a, float b)
        {
            return new Vector(a.x * b, a.y * b, a.z * b);
        }
    }
    Quel prototype utiliser en C++ pour les méthodes + et * si je veux éviter une fuite de mémoire avec une opération comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Vector a, b;
     
    Vector c = a + ( b * 0.5 );
    sachant que C++ n'a pas de ramasse-miettes (garbage collector) et que la ligne ci-haut peut même se retrouver à l'intérieur d'une boucle?


    Luc Le Blanc

  2. #2
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    En restant au plus proche de ce que tu donnes (et avec quelques hypotheses sur ce que ca signifie, C# fait partie des langages avec lesquels j'ai joue mais que je n'ai jamais appronfondi). Il y a des choses qu'on ferait autrement.

    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
    18
    19
    20
    21
    22
    struct Vector
    {
    public:
       float x, y, z;
     
       Vector(float x, float y, float z)
       {
          this->x = x;
          this->y = y;
          this->z = z;
       }
    };
     
    Vector operator+(Vector const& a, Vector const&b)
    {
       return Vector(a.x + b.x, a.y + b.y, a.z + b.z);
    }
     
    Vector operator*(Vector const& a, float b)
    {
       return Vector(a.x * b, a.y * b, a.z * b);
    }
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

Discussions similaires

  1. [C#] Tri d'objet et surcharge d'opérateur
    Par Royd938 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 17/12/2007, 00h26
  2. affichage sans fuite de mémoire
    Par kris1 dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 27/11/2007, 18h21
  3. Cumul de surcharges d'opérateurs
    Par Nats dans le forum C++
    Réponses: 2
    Dernier message: 11/10/2004, 13h37
  4. [VB .NET] Surcharge d'opérateur
    Par Franckintosh dans le forum VB.NET
    Réponses: 2
    Dernier message: 07/09/2004, 19h05
  5. Réponses: 8
    Dernier message: 17/10/2002, 12h52

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