深拷贝c++函数
作者:野牛程序员:2023-07-21 08:19:45 C++阅读 2680
在C++中,深拷贝(deep copy)是指创建一个新对象,并将原始对象中的所有内容复制到新对象中,而不是简单地复制指针或引用。这样可以确保原始对象和新对象在内存中完全独立,互不影响。
为了实现深拷贝,你可以通过自定义拷贝构造函数和赋值运算符重载来确保对象的深拷贝。以下是一个示例类,演示如何实现深拷贝:
#include <iostream>
#include <cstring> // For C-style string manipulation
class MyClass {
private:
int* data;
int size;
public:
// Constructor
MyClass(int s) : size(s) {
data = new int[size];
}
// Destructor
~MyClass() {
delete[] data;
}
// Copy Constructor for Deep Copy
MyClass(const MyClass& other) : size(other.size) {
data = new int[size];
// Perform deep copy of the data
std::memcpy(data, other.data, size * sizeof(int));
}
// Assignment Operator Overloading for Deep Copy
MyClass& operator=(const MyClass& other) {
if (this != &other) {
// Free existing memory
delete[] data;
// Perform deep copy of the data
size = other.size;
data = new int[size];
std::memcpy(data, other.data, size * sizeof(int));
}
return *this;
}
// A simple function to set values in the data array
void setData(int index, int value) {
data[index] = value;
}
// A function to display data
void displayData() {
for (int i = 0; i < size; ++i) {
std::cout << data[i] << " ";
}
std::cout << std::endl;
}
};
int main() {
// Create an object and set data
MyClass obj1(5);
obj1.setData(0, 10);
obj1.setData(1, 20);
obj1.setData(2, 30);
obj1.setData(3, 40);
obj1.setData(4, 50);
// Create a new object using the copy constructor (Deep Copy)
MyClass obj2 = obj1;
// Modify the data of the new object
obj2.setData(2, 100);
// Display data for both objects
std::cout << "Object 1: ";
obj1.displayData();
std::cout << "Object 2: ";
obj2.displayData();
return 0;
}在这个示例中,通过自定义拷贝构造函数和赋值运算符来实现深拷贝。注意在拷贝构造函数和赋值运算符中,使用memcpy函数来复制原始对象的数据,这确保了对象中的数据在内存中是独立的,而不是简单地复制指针。
野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892

- 上一篇:C++实现将一个文件夹内容拷贝至另一个文件夹
- 下一篇:c++浅拷贝和深拷贝
