Move constructor/assignment — transfer resources from one object to another, avoiding deep copies.
1class Buffer {2 size_t size;3 char* data;4public:5 Buffer(size_t s) : size(s), data(new char[s]) {}6 ~Buffer() { delete[] data; }78 // Move constructor9 Buffer(Buffer&& other) noexcept10 : size(other.size), data(other.data) {11 other.size = 0;12 other.data = nullptr;13 }1415 // Move assignment16 Buffer& operator=(Buffer&& other) noexcept {17 if (this != &other) {18 delete[] data;19 size = other.size;20 data = other.data;21 other.size = 0;22 other.data = nullptr;23 }24 return *this;25 }26};2728Buffer a(1024);29Buffer b = std::move(a); // Move, no allocation!
Rules: