Table of Contents
#custom-toc-container
拷贝(复制) 与 拷贝构造函数
# 浅拷贝 & 深拷贝 `浅拷贝`(Shallow Copy),使用同一块内存空间,指向同一块内存空间,内存地址相同。 `深拷贝`(深复制, Deep Copy),会分配新的内存空间,然后将数据复制到新内存空间,使用不同地址的内存空间。 # 拷贝构造函数 创建一个新的变量,并用另一个相同类型的变量初始化新变量,则复制此同类型变量,通过`拷贝构造函数`实现。 ```cpp #include
#include
class String { private: char* m_buffer; unsigned int m_size; public: String(const char* string) { m_size = strlen(string); m_buffer = new char[m_size+1]; memcpy(m_buffer, string, m_size); m_buffer[m_size] = 0; // memcpy(m_buffer, string, m_size+1); // 和上面两行效果相同 } String(const String& other) // 拷贝构造函数 : m_size(other.m_size) { std::cout << "Copied String!" << std::endl; m_buffer = new char[m_size+1]; // 深拷贝。分配了新的内存空间 memcpy(m_buffer, other.m_buffer, m_size+1); } ~String() { delete[] m_buffer; } char& operator[](unsigned int index) { return m_buffer[index]; } friend std::ostream& operator<<(std::ostream& stream, const String& string); // 友元函数 }; std::ostream& operator<<(std::ostream& stream, const String& string) { stream << string.m_buffer; // 友元函数 可以访问私有成员 return stream; } int main() { String s1 = "JiuYu"; String s2 = s1; s2[2] = '3'; std::cout << s1 << std::endl; std::cout << s2 << std::endl; return 0; } ```