面试题答案
一键面试在包含动态分配的数组成员变量的类中,默认的拷贝构造函数执行的是浅拷贝。浅拷贝只是简单地复制指针的值,这意味着两个对象的 data
指针会指向同一块内存。当其中一个对象销毁时,这块内存会被释放,导致另一个对象的 data
指针成为悬空指针,在后续使用时会引发未定义行为。因此,需要重写拷贝构造函数来执行深拷贝,即分配新的内存并将源对象数组中的内容复制到新内存中。
以下是重写后的拷贝构造函数代码示例:
class MyClass {
private:
int* data;
int size;
public:
MyClass(int s) : size(s) {
data = new int[size];
}
// 重写的拷贝构造函数
MyClass(const MyClass& other) : size(other.size) {
data = new int[size];
for (int i = 0; i < size; i++) {
data[i] = other.data[i];
}
}
~MyClass() {
delete[] data;
}
};