In the compiler error discussed at the end of the Transferring ownership section of this chapter, we see that the compiler noted that the data value is moved because it does not implement the Copy trait, which is interesting. What does that mean?
For some data types, particularly the primitive types such as integers and floating-point numbers, copying the bytes that represent them on the stack is all that is required to actually make a complete working copy of the data value. In other words, their representation does not refer to anything stored elsewhere in memory or otherwise rely on ownership to keep everything correct.
There are a number of data types in the standard library that could have the Copy trait as far as memory usage is concerned, but make use of ownership to keep other things safe and correct. Examples include data types that represent access to external...