Move Semantics
Rvalue references and std::move
Interview Relevant: C++11 feature
Move Semantics
Transfer resources instead of copying (C++11).
Code Examples
Move semantics for efficient resource transfer.
cpp
1class Buffer {
2 int* data;
3 size_t size;
4public:
5 // Constructor
6 Buffer(size_t s) : size(s), data(new int[s]) {}
7
8 // Copy constructor (expensive)
9 Buffer(const Buffer& other) : size(other.size) {
10 data = new int[size];
11 copy(other.data, other.data + size, data);
12 }
13
14 // Move constructor (cheap - just steal resources)
15 Buffer(Buffer&& other) noexcept
16 : data(other.data), size(other.size) {
17 other.data = nullptr;
18 other.size = 0;
19 }
20
21 // Move assignment
22 Buffer& operator=(Buffer&& other) noexcept {
23 if (this != &other) {
24 delete[] data;
25 data = other.data;
26 size = other.size;
27 other.data = nullptr;
28 }
29 return *this;
30 }
31
32 ~Buffer() { delete[] data; }
33};
34
35// std::move casts to rvalue reference
36Buffer b1(1000);
37Buffer b2 = move(b1); // Move, not copy!
38
39// Return value optimization (RVO)
40Buffer createBuffer() {
41 return Buffer(100); // May be moved or elided
42}