以下是一个示例,展示了如何实现一个类的深拷贝构造函数和移动构造函数:\n\ncpp\n#include <iostream>\n#include <string>\n\nclass MyClass {\nprivate:\n int* data;\n int size;\n std::string name;\n\npublic:\n // 默认构造函数\n MyClass() : data(nullptr), size(0), name("") {}\n\n // 深拷贝构造函数\n MyClass(const MyClass& other) : size(other.size), name(other.name) {\n data = new int[size];\n for (int i = 0; i < size; i++) {\n data[i] = other.data[i];\n }\n }\n\n // 移动构造函数\n MyClass(MyClass&& other) noexcept : data(other.data), size(other.size), name(std::move(other.name)) {\n other.data = nullptr;\n other.size = 0;\n }\n\n // 析构函数\n ~MyClass() {\n delete[] data;\n }\n\n // 添加数据的方法\n void addData(int value) {\n int* newData = new int[size + 1];\n for (int i = 0; i < size; i++) {\n newData[i] = data[i];\n }\n newData[size] = value;\n delete[] data;\n data = newData;\n size++;\n }\n\n // 输出数据的方法\n void printData() {\n std::cout << "Data: ";\n for (int i = 0; i < size; i++) {\n std::cout << data[i] << " ";\n }\n std::cout << std::endl;\n }\n};\n\nint main() {\n // 创建一个对象并添加数据\n MyClass obj1;\n obj1.addData(1);\n obj1.addData(2);\n obj1.addData(3);\n\n // 使用深拷贝构造函数创建一个新对象\n MyClass obj2(obj1);\n obj2.printData();\n\n // 使用移动构造函数创建一个新对象\n MyClass obj3(std::move(obj1));\n obj3.printData();\n\n return 0;\n}\n\n\n在这个示例中,MyClass 类有一个动态分配的整型数组 data,一个整型变量 size 和一个字符串变量 name。首先,我们定义了一个默认构造函数,它将 data 初始化为 nullptrsize 初始化为 0name 初始化为空字符串。\n\n接下来,我们定义了一个深拷贝构造函数 MyClass(const MyClass& other),它会将 sizename 初始化为 other 对象的值,并且动态分配一个新的 data 数组,并将 other 对象的数据复制到新数组中。\n\n然后,我们定义了一个移动构造函数 MyClass(MyClass&& other) noexcept,它通过将 datasizename 直接从 other 对象中移动到新对象中来实现移动语义。在移动构造函数中,我们还将 other 对象的 data 设置为 nullptr,以确保在销毁 other 对象时不会释放 data。\n\n最后,在 main 函数中,我们创建了一个 MyClass 对象 obj1 并向其添加一些数据。然后,我们使用深拷贝构造函数创建了一个新对象 obj2,并使用移动构造函数创建了另一个新对象 obj3。最后,我们分别调用 printData 方法来打印 obj2obj3 中的数据。\n\n当我们运行这个示例时,输出将会是:\n\n\nData: 1 2 3\nData: 1 2 3\n\n\n这表明深拷贝构造函数和移动构造函数都成功地创建了新对象,并且数据被正确地复制或移动到了新对象中。

C++ 深拷贝构造函数和移动构造函数示例

原文地址: https://www.cveoy.top/t/topic/qn2p 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录