Let's start talking about something very useful and very important for C plus plus developers. Let's talk about move semantics. What exactly is move semantics? Move semantics is the ability to move the contents of one object to another object of the same type or class without having it copied from one object to another. Let's consider an example. Here we construct an object called test string, a string called test string and assign it to a string called test string two, which makes a copy of the string into, a string test string, into test string two, which is exactly what we see in the output if we decide to build it. So let's build it. Build it and run it. And we see copy test string and then another test string. But if we decide to use move semantics to construct test string two, the original string is destroyed. In actuality, it is not, it is actually constructed in such a way that test string two takes ownership of the contents of test string. Since the data is transferred, the test string variable is now empty, or more precisely it is invalid. Although in this case, in the case of string, it still is accessible. So I'll just make some changes and demonstrate it. So to make test string two using what's known as a move constructor where we're moving the contents of the original string to the new string, we need to use the function called STD move, but we'll talk about it later in this lesson. Let's build it. Let's run it. And as you can see, we have a space which is coming from here, but the contents of the test string is now unavailable. The contents of the test string, which was test string, have been moved to test string two. More on how move semantics work, let's go to the next section.