C++ 学习笔记 浅拷贝/深拷贝
class String { public: String(const char* cstr=0); String(const String& str); // 拷贝构造函数(为什么叫拷贝,因为传递的参数是相同类型) String& operator=(const String& str); // 拷贝赋值函数 ~String(); char* get_c_str() const { return m_data; } private: char* m_data; }; #include <cstring> inline String::String(const char* cstr) { if (cstr) { m_data = new char[strlen(cstr)+1]; strcpy(m_data, cstr); } else { m_data = new char[1]; *m_data = '\0'; } } inline String::~String() { delete[] m_data; }
// 深拷贝赋值函数 inline String& String::operator=(const String& str) { if (this == &str) return *this; delete[] m_data; m_data = new char[ strlen(str.m_data) + 1 ]; strcpy(m_data, str.m_data); return *this; }
// 深拷贝构造函数 inline String::String(const String& str) { this->m_data = new char[ strlen(str.m_data) + 1 ]; strcpy(this->m_data, str.m_data); }
浅拷贝:编译器自带的是浅拷贝构造函数。只是将b的地址拷贝给a,此时a和b指向同一块地址,a之前指向的空间形成内存泄漏,而且a b同时指向一个地址也很危险
深拷贝:深拷贝构造函数或深拷贝赋值函数需要我们自己写。
浙公网安备 33010602011771号