通过赋值操作实现动态数组的C++深度拷贝,可以采取以下步骤:
size
:表示数组的大小data
:指向存储数组元素的内存空间的指针copyData()
:用于将源数组的数据复制到新数组中getValue()
:用于获取指定位置的数组元素的值setValue()
:用于设置指定位置的数组元素的值copyData()
:copyData()
方法进行深度拷贝下面是一个示例实现:
#include <iostream>
#include <cstring>
class DynamicArray {
private:
int size;
int* data;
int* copyData(const int* srcData, int srcSize) {
int* newData = new int[srcSize];
std::memcpy(newData, srcData, srcSize * sizeof(int));
return newData;
}
public:
DynamicArray(int arraySize) : size(arraySize), data(new int[arraySize]) {
// 初始化数组数据
for (int i = 0; i < size; i++) {
data[i] = i;
}
}
~DynamicArray() {
delete[] data;
}
int getValue(int index) const {
return data[index];
}
void setValue(int index, int value) {
data[index] = value;
}
DynamicArray& operator=(const DynamicArray& other) {
if (this == &other) {
return *this; // 自我赋值,直接返回当前对象的引用
}
delete[] data; // 释放当前对象可能已分配的内存空间
size = other.size;
data = copyData(other.data, other.size);
return *this;
}
};
int main() {
DynamicArray arr1(5);
DynamicArray arr2(10);
arr2 = arr1; // 使用赋值操作符进行深度拷贝
// 修改 arr1 中的数据
for (int i = 0; i < 5; i++) {
arr1.setValue(i, i * 2);
}
// 打印 arr2 中的数据,应与 arr1 保持独立
for (int i = 0; i < 5; i++) {
std::cout << arr2.getValue(i) << " ";
}
return 0;
}
这是一个简单的示例,演示了通过赋值操作实现动态数组的深度拷贝。实际应用中,可能需要根据具体情况进行扩展和改进。
领取专属 10元无门槛券
手把手带您无忧上云