2012-12-04 75 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