类的私有成员实现浅拷贝
时间: 2024-05-07 16:22:14 浏览: 51
C++中sting类的简单实现方法
当一个类中存在指针类型的成员变量时,如果使用默认的浅拷贝构造函数和赋值运算符重载函数,会导致多个对象共享同一块内存空间,从而出现潜在的内存泄漏或者程序崩溃等问题。
例如,假设有一个包含指针成员变量的类 `MyClass`:
```cpp
class MyClass {
public:
MyClass(int size) {
data = new int[size];
// ... 初始化 data
}
~MyClass() {
delete[] data;
}
private:
int* data;
};
```
如果使用默认的浅拷贝构造函数和赋值运算符重载函数,会导致不同的对象共享同一块内存空间:
```cpp
MyClass a(10);
MyClass b = a; // 调用浅拷贝构造函数
MyClass c(5);
c = a; // 调用浅拷贝赋值运算符重载函数
```
此时,对于 `a`、`b` 和 `c` 三个对象,它们的 `data` 指针都指向同一块内存空间。当其中一个对象释放内存时,其他对象的 `data` 指针也会变成野指针,从而出现内存泄漏或者程序崩溃等问题。
解决方法是实现类的深拷贝构造函数和赋值运算符重载函数,使得每个对象都拥有独立的内存空间:
```cpp
class MyClass {
public:
MyClass(int size) {
data = new int[size];
// ... 初始化 data
}
~MyClass() {
delete[] data;
}
MyClass(const MyClass& other) { // 深拷贝构造函数
data = new int[size];
memcpy(data, other.data, sizeof(int) * size);
}
MyClass& operator=(const MyClass& other) { // 深拷贝赋值运算符重载函数
if (this != &other) {
delete[] data;
data = new int[size];
memcpy(data, other.data, sizeof(int) * size);
}
return *this;
}
private:
int* data;
};
```
这样,对于 `a`、`b` 和 `c` 三个对象,它们的 `data` 指针指向不同的内存空间,互不影响。
阅读全文