chapter_2_classes/ex_1_polynomial.cpp
Polynomial(Polynomial&& p) noexcept : degree(p.degree) {
            std::cout << "Move constructor" << std::endl;
            coefficients = std::move(p.coefficients);
            p.degree = -1; // The source must be left in an "empty" state
        }
// Move constructor - shallow copy (no copy)
// Argument is a rvalue reference. i.e. can take temporary/non-addressed objects as an argument that are mutable
Move constructor - shallow copy (no copy)
Argument is a rvalue reference.
Move constructor - shallow copy ( no copy ) Argument is a rvalue reference .
Polynomial(Polynomial&& p) noexcept : degree(p.degree) {
            std::cout << "Move constructor" << std::endl;
            coefficients = std::move(p.coefficients);
            p.degree = -1; 
        }
Polynomial ( Polynomial && p ) noexcept : degree ( p . degree ) { std :: cout << " " << std :: endl ; coefficients = std :: move ( p . coefficients ) ; p . degree = -1 ; }
Move constructor - shallow copy (no copy)
Argument is a rvalue reference.
Move constructor - shallow copy ( no copy ) Argument is a rvalue reference .
// The source must be left in an "empty" state