The C++ language directly supports implementation of classes whose instances have value type behavior.
That means that we can copy them and assign the state of one instance to another instance with the result
that the instances have, at the moment of copying or assignment, the same state values, but thoses states are independent.
Should the state of one be changed using its class interface, the other will not suffer that change.
We implement value behavior by providing correctly implemented copy constructors, overloading assignment operators, and
providing correctly implemented destructors.
We also can, using C++11's move construction and move assignment, make changing ownership of an instance's values
very efficient. By default ownership is only moved from a temporary (r value) to a declared named instance (l value).
All of this is demonstrated in a simple way in the presentation on
Value Types
and code for the
Str class, discussed in Lecture #4 and Lecture #5.