C++深拷贝构造函数
时间: 2024-01-11 17:20:25 浏览: 116
深拷贝是指在进行对象拷贝时,不仅要拷贝对象本身,还要拷贝对象所指向的动态内存。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() {
delete[] m_data;
}
// 赋值运算符重载
String& operator=(const String& other) {
if (this != &other) {
delete[] m_data;
m_data = new char[strlen(other.m_data) + 1];
strcpy(m_data, other.m_data);
}
return *this;
}
void print() {
cout << m_data << endl;
}
private:
char* m_data;
};
int main() {
String str1("Hello");
String str2(str1); // 调用拷贝构造函数
String str3 = str1; // 调用拷贝构造函数
String str4;
str4 = str1; // 调用赋值运算符重载
str1.print(); // 输出:Hello
str2.print(); // 输出:Hello
str3.print(); // 输出:Hello
str4.print(); // 输出:Hello
return 0;
}
```
在上面的示例代码中,我们定义了一个String类,其中包含了一个char*类型的成员变量m_data,用于存储字符串。在构造函数中,我们通过new运算符为m_data分配了动态内存,并将字符串拷贝到了该内存中。在拷贝构造函数和赋值运算符重载中,我们同样需要为m_data分配动态内存,并将其他对象的m_data拷贝到该内存中,从而实现了深拷贝。
阅读全文