Implementing move semantics
Move semantics is a key feature that drives the performance improvements of modern C++. They enable moving, rather than copying, resources, or, in general, objects that are expensive to copy. However, it requires that classes implement a move constructor and move assignment operator. These are provided by the compiler in some circumstances, but in practice, it is often the case that you have to explicitly write them. In this recipe, we will see how to implement the move constructor and the move assignment operator.
Getting ready
You are expected to have basic knowledge of rvalue references and the special class functions (constructors, assignment operators, and destructors). We will demonstrate how to implement a move constructor and assignment operator using the following Buffer
class:
class Buffer
{
unsigned char* ptr;
size_t length;
public:
Buffer(): ptr(nullptr), length(0)
{}
explicit Buffer(size_t const size):
ptr(new unsigned...