1. Object Based(基于对象) vs. Object Oriented(面向对象)
Object Based: 面对的是单一class的设计;
Object Oriented:面对的是多重classes的设计,class 和 class 之间的关系。
classes 的两个经典分类:
- class without pointer members -- complex
- class with pointer members -- string
2. 设计 string
2.1 防卫式声明
2.2 Big Three
若类内有指针成员,则一定要重写 拷贝构造函数,赋值构造函数和析构函数,即Big Three,执行深拷贝操作。编译器默认生成的 拷贝构造函数和赋值构造函数 只会进行浅拷贝!
由于未能确定string对象的大小,因此类内提供一个指针成员,指向动态内存。
2.3 ctor 和 dtor
注意!在析构函数中,调用 delete [] m_data; 释放内存。
在右下角的函数应用中,一旦离开作用域 {} , s1 和 s2 自动调用析构函数释放内存。由于 p 是动态分配的内存,其生命周期在整个程序运行周期内。p 要到程序结束运行后,由系统自动回收泄露的内存。
2.4 copy ctor 和 copy op=
拷贝构造函数
拷贝赋值函数
分3个步骤:
- 释放源对象动态内存;
- 重新分配动态内存空间;
- 拷贝动态内存中的内容;
其中,检测自我赋值有2层用意。
- 提高效率;
- 防止错误调用。其原因如下图所示,
来源:https://www.cnblogs.com/gdut-gordon/p/12306092.html