一、C++三个特殊的函数(Big Three):拷贝构造函数,赋值构造函数和析构函数
class里面只要有指针,就一定要有拷贝构造(copy stor)和拷贝赋值(copy op=)
因为系统默认的函数所做的拷贝是浅拷贝,浅拷贝只拷贝指针,会造成内存泄漏,要避免进行浅拷贝。
copy stor和copy op=所做的是深拷贝,深拷贝所做的是内容的拷贝。
1、析构函数
~String(){ delete[] m_data;}
与构造函数相对应,对对象进行收尾工作,当对象所在的作用域结束前释放动态分配内存
2、拷贝构造
String(const String& str);
函数收到的参数与函数类型相同
3、拷贝赋值
String& operator=(const String& str);
a检查是否为自我赋值
b先清空自己
c分配足够大的空间
d拷贝内容
检查是否为自我赋值是为了提高效率和赋值正确性
函数第一步是清空自己,如果没有检查是否为自我赋值,在后面自我赋值时将导致赋值失败
二、(stack)栈和(heap)堆
Stack object的生命在作用域结束后结束,它会被自动清理
Heap object的生命在它被delete后结束,需要我们手动delete
new:先分配memory,在调用ctor
delete:先调用ctor,在释放memory
array new必须搭配array delete,否则会造成内存泄漏