六一的部落格


关关难过关关过,前路漫漫亦灿灿。



三/五法则

3个基本操作用以控制类的拷贝: 拷贝构造函数, 拷贝赋值运算符, 析构函数

用以控制类的拷贝的5个完整操作: 拷贝构造函数, 拷贝赋值运算符, 析构函数 + 移动构造函数, 移动赋值运算符

本节依旧围绕3个基本操作, 描述它们之间的关系


设计类之拷贝操作的入口: 析构函数

如果需要特殊处理, 才会给出析构函数的定义

如在析构函数体内释放动态内存

相应地, 也有申请动态内存的逻辑, 如拷贝和赋值

需要析构函数的类也需要拷贝和赋值操作

如果一个类需要自定义析构函数, 几乎可以肯定它也需要自定义拷贝赋值运算符和拷贝构造函数


需要拷贝操作的类也需要赋值操作, 反之亦然

如果需要为类的每个对象分配一个独有的, 唯一的序号, 我们需要给出拷贝构造函数的定义

而赋值时, 序号不会发生改变: 还需给出拷贝赋值运算符的定义

析构函数不参与其中

如果一个类需要给出拷贝构造函数的定义, 几乎可以肯定它也需要一个拷贝赋值运算符

反之亦然

如果一个类需要给出拷贝赋值运算符的定义, 几乎可以肯定它也需要一个拷贝构造函数

无论是需要拷贝构造函数还是需要拷贝赋值运算符, 都不必然意味着也需要析构函数


类的拷贝操作


三/五法则

3个基本操作用以控制类的拷贝: 拷贝构造函数, 拷贝赋值运算符, 析构函数

用以控制类的拷贝的5个完整操作: 拷贝构造函数, 拷贝赋值运算符, 析构函数 + 移动构造函数, 移动赋值运算符

本节依旧围绕3个基本操作, 描述它们之间的关系


设计类之拷贝操作的入口: 析构函数

如果需要特殊处理, 才会给出析构函数的定义

如在析构函数体内释放动态内存

相应地, 也有申请动态内存的逻辑, 如拷贝和赋值

需要析构函数的类也需要拷贝和赋值操作

如果一个类需要自定义析构函数, 几乎可以肯定它也需要自定义拷贝赋值运算符和拷贝构造函数


需要拷贝操作的类也需要赋值操作, 反之亦然

如果需要为类的每个对象分配一个独有的, 唯一的序号, 我们需要给出拷贝构造函数的定义

而赋值时, 序号不会发生改变: 还需给出拷贝赋值运算符的定义

析构函数不参与其中

如果一个类需要给出拷贝构造函数的定义, 几乎可以肯定它也需要一个拷贝赋值运算符

反之亦然

如果一个类需要给出拷贝赋值运算符的定义, 几乎可以肯定它也需要一个拷贝构造函数

无论是需要拷贝构造函数还是需要拷贝赋值运算符, 都不必然意味着也需要析构函数