class 带有指向对象 一定要有拷贝构造和拷贝赋值 不然可能就是浅拷贝 可能两个对象指针指向同一个数据,如果一个对象数据发生变动,另一个对象的数据也会随之变动
拷贝构造函数 收到参数就是自己这种类型
inline 接收自己类型的参数 String::String(const String& str) { 分配足够空间 m_data = new char[strlen(cstr)+1]; strcpy(m_data,cstr); //将参数从cstr拷贝到m_data }
String s1 = 'hello';
String s2(s1); // 等同于 String s2 =s1
浅拷贝只拷贝指针
拷贝赋值函数
先把自己的内存释放,然后分配一块动态内存,最后再拷贝过来
inline String::operator=(const String& str) { if(this == &str) //指针指向是否相同 没写如果是浅拷贝就爆炸 return *this; //检测自我赋值 s2=s1 如果是自我赋值 就返回 delete[] m_data; //释放内存 m_data = new char[strlen(str.m_data)+1]; strcpy(m_data,str.m_data); //拷贝 return *this; }
析构函数
inline String::String() { delete[] m_data; //动态分配内存 使用完就要把内存释放 防止内存泄露 }