Being beginner in C++, I have found following code while reading on copy constructor and assignment operator.
Right below the code, I found it needs operator=.
I don't understand why there is rule of three, just by having copy constructor can't this work?
#include <algorithm> // std::copy
#include <cstddef> // std::size_t
class dumb_array
{
public:
    // (default) constructor
    dumb_array(std::size_t size = 0)
        : mSize(size),
          mArray(mSize ? new int[mSize]() : nullptr)
    {
    }
    // copy-constructor
    dumb_array(const dumb_array& other)
        : mSize(other.mSize),
          mArray(mSize ? new int[mSize] : nullptr)
    {
        // note that this is non-throwing, because of the data
        // types being used; more attention to detail with regards
        // to exceptions must be given in a more general case, however
        std::copy(other.mArray, other.mArray + mSize, mArray);
    }
    // destructor
    ~dumb_array()
    {
        delete [] mArray;
    }
private:
    std::size_t mSize;
    int* mArray;
};
This class almost manages the array successfully, but it needs operator= to work correctly.
