2012-12-04 2 views
0

J'ai créé ce simple objet en C++:retour objet avec pointeur dans ce

class Array 
{ 
    int Size; 
    int * pArr; 

public: 
    explicit Array(int InSize = 0) 
    { 
     Size=InSize; 
     if (Size) 
      pArr = new int[Size]; 
     else 
      pArr = NULL; 
    } 

    Array(const Array & InArray) 
    {  
     Size=InArray.Size; 
     if (Size) 
      pArr=new int[Size]; 
     else 
      pArr=NULL; 
    } 

    ~Array() 
    { 
     if (pArr) 
     { 
      delete []pArr; 
      Size=0; 
     }  
    } 
}; 

Je suis en train de surcharger l'opérateur + de la manière suivante:

Array operator+(const Array &LOpArray,const Array &ROpArray) 
{ 
    int MinSize=LOpArray.Size<ROpArray.Size ? LOpArray.Size : ROpArray.Size ; 
    Array ResArray; 

    if (LOpArray.Size<ROpArray.Size) 
     ResArray=ROpArray; 
    else 
     ResArray=LOpArray; 
    for (int i=0;i<MinSize;i++) 
     ResArray.pArr[i]=LOpArray.pArr[i]+ROpArray.pArr[i]; 
    return(ResArray); 
} 

affectation est définie comme suit:

Array& Array::operator=(const Array &ROpArray) 
{ 
    if (pArr!=ROpArray.pArr) 
    {   
     Size=ROpArray.Size; 
     pArr=new int[Size]; 
     for (int i=0;i<Size;i++) 
      pArr[i]=ROpArray.pArr[i]; 
    } 
    return (*this); 
} 

Le problème est quand je l'utilise comme:

Array A1(20),A2(8),A4; 

....//initializing pointer contents 

A4=A1+A2; 

alors A4 a des valeurs correctes (c.-à-d. size = 20 et new, non NULL, int pointeur) mais toutes les valeurs pointées ont des valeurs de déchet. le débogage a montré que dans l'opérateur + les valeurs de la fonction sont effectivement correctes mais elles sont supprimées lors du retour de l'opérateur + fonction

Qu'est-ce que je fais mal?

+1

Veuillez modifier votre article pour le formatage. J'ai fait les premières lignes pour vous montrer à quoi il doit ressembler. N'utilisez pas d'onglets. –

+0

Je l'ai réédité .... ou alors j'espère. –

+0

Beaucoup mieux, merci! –

Répondre

1

Je vois deux problèmes:

  1. Le constructeur de copie ne parvient pas à copier les données. Fuites de mémoire (cela n'a rien à voir avec votre problème, mais vaut la peine de corriger).
+0

1. Constructeur fixe de copie fixe - il a résolu le problème .... Merci! 2. Qu'entendez-vous par "fuites de mémoire"? –

+0

@ user1877002: Je pensais que ça pourrait :) Vous êtes les bienvenus. – NPE