Why not specifying the copy constructor is usually bad
The compiler has only limited knowledge of what you really want to do.
All it can do is to make a member-wise copy of all the data members in your class.
If you have a pointer, it will copy the pointer -- but then your new object has a pointer pointing to somewhere outside the object’s scope.
cube::cube (const cube& c)
cube::cube (const cube& c)
and it can lead to a lot of problems.
Once more: Always provide a copy constructor.