拷贝构造
String(const String& str)
拷贝复制
String& operator=(const String& str)
析构函数
~String()
String s1("hello")
1.String的构造(构造函数)实际是利用指针传入new的char数组m_data,数组长度为原内容+1再将其拷贝到m_data中
由于本身构造的时候new了内存,因此需要在析构函数中将其delete否则会造成内存泄漏。
2.如果类带有指针,必须有拷贝构造和拷贝复制,因为本身拷贝构造和拷贝复制默认一一对应,如果构造的对象中有指针,对象的内容其实是只有指针的,并不含有值。(浅)拷贝将会指向同一地址。
String s2(s1)
3.拷贝构造
利用指针传入,new一块新的空间,实现(深)拷贝
s2=s1
4.拷贝赋值
理论上先把原有的空间清空,然后创建和拷贝内容需要的一样大的空间,再把拷贝的内容传入,与此同时,还需要先进行自我赋值的检测,因为,如果是自我赋值,在清除原有空间的时候就把内容清除了,会产生指针悬挂
5.stack栈
存在于某一作用域的一块内存空间,调用函数,函数本身会形成一个栈用来放置他所接收的参数以及返回地址,函数本体内声明的任何变量也都在栈中
6.Heap堆