Boolan第二周笔记

一、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,否则会造成内存泄漏

推荐阅读更多精彩内容