2012-12-04 132 views
0

我已經建立在C++這個簡單的對象:在它返回對象與指針

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; 
     }  
    } 
}; 

我試圖重載+操作以下面的方式:

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); 
} 

分配被定義爲:

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); 
} 

問題是,當我使用它像:

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

....//initializing pointer contents 

A4=A1+A2; 

然後A4具有正確的值(即, size = 20 and new,non NULL,int pointer) 但所有指向的值都有垃圾值。 調試顯示在運算符+函數值實際上是正確的 ,但它們從運算符+函數返回時被刪除

我在做什麼錯了?

+1

請編輯您的文章進行格式化。我已經完成了前幾行,向您展示它應該是什麼樣子。不要使用標籤。 –

+0

我已經重新編輯過....或者我希望。 –

+0

好多了,謝謝! –

回答

1

我可以看到幾個問題:

  1. 拷貝構造函數無法複製數據。
  2. operator=泄漏內存(這與您的問題沒有任何關係,但值得修復)。
+0

1.有固定拷貝構造函數 - 它解決了問題.... Thanx! 2.「漏記」是什麼意思? –

+0

@ user1877002:我認爲它可能:)不客氣。 – NPE