c++深拷贝何浅拷贝
时间: 2023-12-22 21:27:39 浏览: 79
08_26_C++ 深浅拷贝的区别
C++中的深拷贝和浅拷贝是指在对象拷贝时,是否仅仅是拷贝了指针或引用,还是拷贝了指针或引用所指向的对象。具体来说,浅拷贝只是简单的指针或引用拷贝,两个对象指向同一块内存地址,修改其中一个对象的值会影响另一个对象的值。而深拷贝则是在堆内存中重新申请空间,将原对象的值复制到新的内存空间中,两个对象的内存地址不同,修改其中一个对象的值不会影响另一个对象的值。
下面是一个C++类的例子,演示了深拷贝和浅拷贝的区别:
```c++
#include <iostream>
#include <cstring>
using namespace std;
class String {
public:
String(const char* str = "") {
if (str == nullptr) {
m_data = new char[1];
*m_data = '\0';
} else {
m_data = new char[strlen(str) + 1];
strcpy(m_data, str);
}
}
// 拷贝构造函数
String(const String& other) {
m_data = new char[strlen(other.m_data) + 1];
strcpy(m_data, other.m_data);
}
// 赋值运算符重载
String& operator=(const String& other) {
if (this != &other) {
char* temp = new char[strlen(other.m_data) + 1];
strcpy(temp, other.m_data);
delete[] m_data;
m_data = temp;
}
return *this;
}
~String() {
delete[] m_data;
}
void print() {
cout << m_data << endl;
}
private:
char* m_data;
};
int main() {
String str1("hello");
String str2 = str1; // 浅拷贝
String str3("world");
str3 = str1; // 深拷贝
str1.print(); // 输出:hello
str2.print(); // 输出:hello
str3.print(); // 输出:hello
str2 = "world";
str1.print(); // 输出:world
str2.print(); // 输出:world
str3.print(); // 输出:hello
return 0;
}
```
阅读全文