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}

AI Tutor

Ask about the topic

Sign in Required

Please sign in to use the AI tutor

Sign In