返回带有指针的对象

时间:2012-12-04 20:53:47

标签: object pointers

我用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和 new ,非NULL,int指针) 但是所有指向的值都有垃圾值。 调试显示,在operator +函数值中实际上是正确的 但是从操作符+函数返回时它们被删除

我做错了什么?

1 个答案:

答案 0 :(得分:2)

我可以看到几个问题:

  1. 复制构造函数无法复制数据。
  2. operator=泄漏内存(这与您的问题没有任何关系,但值得修复)。