Skip to content

Move constructor

What it does is to copy the data and nullify the source. We mark it as noexcept, so that it would not fall back to the copy constructor of the vector. The move constructor is featured by the && rvalue reference. When use move, it picks the correct constructor among others.

class MyVectorWrapper {
public:
    // Move Constructor (Shallow Copy + Nullify Source)
    MyVectorWrapper(MyVectorWrapper&& other) noexcept : data_(other.data_), size_(other.size_) {
        std::cout << "Move Constructor: Moving " << size_ << " ints.\n";
        other.data_ = nullptr; // Crucial: Nullify the source's pointer
        other.size_ = 0;       // Crucial: Reset source's size
    }


private:
    int* data_;
    size_t size_;
};

int main() {
    MyVectorWrapper moved_wrapper = std::move(original_wrapper); // Calls Move Constructor
    return 0;
}