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

我究竟做错了什么?

4

1 回答 1

2

我可以看到几个问题:

  1. 复制构造函数无法复制数据。
  2. operator=泄漏内存(这与您的问题无关,但值得修复)。
于 2012-12-04T21:30:08.170 回答