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 およびnew、non NULL、int ポインター) がありますが、ポイントされたすべての値にはガベージ値があります。デバッグは、演算子+関数の値が実際には正しいことを示しましたが、演算子+関数から戻ると削除されます

私は何を間違っていますか?

4

1 に答える 1

2

私はいくつかの問題を見ることができます:

  1. コピーコンストラクターはデータのコピーに失敗します。
  2. operator=メモリリーク(これは問題とは関係ありませんが、修正する価値があります)。
于 2012-12-04T21:30:08.170 に答える