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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容