面向对象上7-9
7字符串类的实现(带指针)
- 拷贝构造
- 拷贝赋值
- 析构函数
new分配内存
拷贝构造和拷贝赋值有一个默认版本
如果数据带指针,需要写一个新的拷贝函数
否则默认版本只会对指针进行操作,例如b = a,只会将b的指针也指向a,而原本b指向的东西漂浮,这就叫内存泄露
改动a,b也随之改变,叫做浅拷贝
- private:存储字符串的数据应该是一个指针
- 指针需要额外写的构造函数
拷贝构造
String::String const String& str)
拷贝赋值
String& String::operator(const String& str)
- 检测自我赋值
- 先把左边杀掉,再创造相同空间,最后复制
析构函数
delete[] m_data
8堆,栈与内存管理
操作符重载<<,与complex类似
栈stack和堆heap
栈,是存在于作用域{}的内存空间,由析构函数自动清理
堆,new生成,是操作系统提供的global内存空间,程序可动态分配获得区块,因此必须手动delete。
static objects,程序结束才死亡
global objects
heap objects,堆
Complex* p = new Complex(1,2)
new
- 分配内存
- 转型
- 构造函数
delete
- 析构函数
- 释放内存
new和delete占用多少内存
Complex* p = new Complex[3]
array new和array delete
9 复习String类的实现过程
- 类声明
- private数据类型
- publice
- 构造函数
- 拷贝构造
拷贝赋值
析构函数 - 写的时候,函数名→参数(输入)→返回类型(输出)
能不能用const,能不用传引用&
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 C++学习笔记!