c++里面的深拷贝和浅拷贝
时间: 2024-04-16 08:20:20 浏览: 91
深拷贝和浅拷贝是C++中常用的两种拷贝方式,它们的区别在于拷贝时是否复制指针所指向的内容。下面是它们的详细介绍和示例代码:
1.浅拷贝
浅拷贝是指将一个对象的值复制到另一个对象中,但是两个对象共享同一块内存地址,因此它们的指针成员变量指向同一块内存。当其中一个对象释放内存时,另一个对象的指针就会变成野指针,导致程序崩溃。
示例代码:
```c++
class ShallowCopy {
public:
ShallowCopy(int size) {
m_size = size;
m_data = new int[m_size];
}
ShallowCopy(const ShallowCopy& other) {
m_size = other.m_size;
m_data = other.m_data;
}
~ShallowCopy() {
delete[] m_data;
}
private:
int m_size;
int* m_data;
};
```
2.深拷贝
深拷贝是指将一个对象的值复制到另一个对象中,并且为另一个对象分配一块新的内存地址,将原对象的值复制到新的内存地址中。这样两个对象就不再共享同一块内存地址,它们的指针成员变量指向不同的内存地址。
示例代码:
```c++
class DeepCopy {
public:
DeepCopy(int size) {
m_size = size;
m_data = new int[m_size];
}
DeepCopy(const DeepCopy& other) {
m_size = other.m_size;
m_data = new int[m_size];
memcpy(m_data, other.m_data, m_size * sizeof(int));
}
~DeepCopy() {
delete[] m_data;
}
private:
int m_size;
int* m_data;
};
```
阅读全文