std::move
We can avoid copying the string
s by using two facilities introduced by the new library. First, several of the library classes, including string
, define so-called “move constructors.” The details of how the string
move constructor works—like any other detail about the implementation—are not disclosed. However, we do know that move constructors typically operate by “moving” resources from the given object to the object being constructed. We also know that the library guarantees that the “moved-from” string
remains in a valid, destructible state. For string
, we can imagine that each string
has a pointer to an array of char
. Presumably the string
move constructor copies the pointer rather than allocating space for and copying the characters themselves.
The second facility we’ll use is a library function named move
, which is defined in the utility
header. For now, there are two important points to know about move
. First, for reasons we’ll explain in § 13.6.1 (p. 532), when reallocate
constructs the string
s in the new memory it must call move
to signal that it wants to use the string
move constructor. If it omits the call to move
the string
the copy constructor will be used. Second, for reasons we’ll cover in § 18.2.3 (p. 798), we usually do not provide a using
declaration (§ 3.1, p. 82) for move
. When we use move
, we call std::move
, not move
.