用c++实现如下代码:编写一个变长数组,要实现复制构造、移动构造和拷贝构造
#include <iostream> #include <vector> class DynamicArray { private: std::vector<int> arr; public: // 默认构造函数 DynamicArray() {} // 析构函数 ~DynamicArray() {} // 构造函数,使用初始化列表 DynamicArray(std::initializer_list<int> init_list) : arr(init_list) { std::cout << "Constructed with initializer list." << std::endl; } // 复制构造函数 DynamicArray(const DynamicArray& other) : arr(other.arr) { std::cout << "Copy constructor called." << std::endl; } // 移动构造函数 DynamicArray(DynamicArray&& other) : arr(std::move(other.arr)) { std::cout << "Move constructor called." << std::endl; } // 拷贝赋值运算符 DynamicArray& operator=(const DynamicArray& other) { if (this == &other) { return *this; } arr = other.arr; std::cout << "Copy assignment operator called." << std::endl; return *this; } // 移动赋值运算符 DynamicArray& operator=(DynamicArray&& other) { if (this == &other) { return *this; } arr = std::move(other.arr); std::cout << "Move assignment operator called." << std::endl; return *this; } // 在数组末尾添加元素 void push_back(int value) { arr.push_back(value); } // 打印数组元素 void print() const { for (const auto& element : arr) { std::cout << element << " "; } std::cout << std::endl; } // 获取数组大小 size_t size() const { return arr.size(); } // 访问元素 int operator[](size_t index) const { return arr[index]; } }; int main() { // 使用初始化列表创建对象 DynamicArray arr1 = {1, 2, 3, 4, 5}; std::cout << "arr1: "; arr1.print(); // 复制构造 DynamicArray arr2 = arr1; std::cout << "arr2 (copy of arr1): "; arr2.print(); // 移动构造 DynamicArray arr3 = std::move(arr1); std::cout << "arr3 (moved from arr1): "; arr3.print(); std::cout << "arr1 after move: "; arr1.print(); // 拷贝赋值 DynamicArray arr4; arr4 = arr2; std::cout << "arr4 (copy assigned from arr2): "; arr4.print(); // 移动赋值 DynamicArray arr5; arr5 = std::move(arr2); std::cout << "arr5 (moved from arr2): "; arr5.print(); std::cout << "arr2 after move: "; arr2.print(); // 添加元素 arr3.push_back(6); std::cout << "arr3 after adding an element: "; arr3.print(); return 0; }