C++ Primer学习之(13)——复制控制
2014-06-16 19:01
134 查看
P601:
复制构造函数:一种特殊构造函数,具有单个形参,该形参(常用const修饰)是对该类类型的引用。当定义一个新对象并用一个同类型的对象对它进行初始化时,将显式使用复制构造函数。
析构函数:构造函数的互补:当对象超出作用域或动态分配的对象被删除时,将自动应用析构函数。
复制操作符:赋值操作符可以通过制定不同类型的右操作数而重载。
有一种情况需要类定义自己的复制控制成员:类具有指针成员。
C++支持两种初始化形式:直接初始化和复制初始化。
复制初始化:使用=符号
直接初始化:将初始化式放在圆括号中
P605:
合成的复制构造函数
如果没有定义复制构造函数,编译器会为我们合成一个。合成复制构造函数的行为是,执行逐个成员初始化,将新对象初始化为原对象的副本。
逐个成员初始化最简单的概念模型是,将合成复制构造函数看成这样一个构造函数:其中每个数据 成员在构造函数初始化列表中进行初始化。
P608:
有些类需要完全禁止复制。为了防止复制,类必须显式声明其复制构造函数为private。
大多数类应定义复制构造函数和默认构造函数
不允许复制的类对象只能作为引用传递给函数或从函数返回,它们也不能用作容器的元素。一般来说,最好显式或隐式定义默认构造函数和复制构造函数。只有不存在其他构造函数时才合成默认构造函数。
注:需要养成的好习惯,定义复制构造函数。
P609:
重载赋值
重载操作符是一些函数,其名字为operator后跟着所定义的操作符的符号。因此,通过定义名为operator=的函数,可以对赋值进行定义。
例:
class Sales_item
{
public:
// equivalent to the synthesized assignment operator
Sales_item& operator=(const Sales_item &);
};一般而言,如果类需要复制构造函数,它也会需要赋值操作符。
P611:
析构函数
析构函数可以完成所需资源回收,作为类构造函数的补充。
如果类需要析构函数,则它也需要赋值操作符和复制构造函数。这是一个有用的经验法则。这个法则常称为三法则。
析构函数与复制构造函数或赋值操作符之间的一个重要区别是,即使我们编写了自己的析构函数,合成析构函数仍然运行。
复制构造函数:一种特殊构造函数,具有单个形参,该形参(常用const修饰)是对该类类型的引用。当定义一个新对象并用一个同类型的对象对它进行初始化时,将显式使用复制构造函数。
析构函数:构造函数的互补:当对象超出作用域或动态分配的对象被删除时,将自动应用析构函数。
复制操作符:赋值操作符可以通过制定不同类型的右操作数而重载。
有一种情况需要类定义自己的复制控制成员:类具有指针成员。
C++支持两种初始化形式:直接初始化和复制初始化。
复制初始化:使用=符号
直接初始化:将初始化式放在圆括号中
P605:
合成的复制构造函数
如果没有定义复制构造函数,编译器会为我们合成一个。合成复制构造函数的行为是,执行逐个成员初始化,将新对象初始化为原对象的副本。
逐个成员初始化最简单的概念模型是,将合成复制构造函数看成这样一个构造函数:其中每个数据 成员在构造函数初始化列表中进行初始化。
P608:
有些类需要完全禁止复制。为了防止复制,类必须显式声明其复制构造函数为private。
大多数类应定义复制构造函数和默认构造函数
不允许复制的类对象只能作为引用传递给函数或从函数返回,它们也不能用作容器的元素。一般来说,最好显式或隐式定义默认构造函数和复制构造函数。只有不存在其他构造函数时才合成默认构造函数。
注:需要养成的好习惯,定义复制构造函数。
P609:
重载赋值
重载操作符是一些函数,其名字为operator后跟着所定义的操作符的符号。因此,通过定义名为operator=的函数,可以对赋值进行定义。
例:
class Sales_item
{
public:
// equivalent to the synthesized assignment operator
Sales_item& operator=(const Sales_item &);
};一般而言,如果类需要复制构造函数,它也会需要赋值操作符。
P611:
析构函数
析构函数可以完成所需资源回收,作为类构造函数的补充。
如果类需要析构函数,则它也需要赋值操作符和复制构造函数。这是一个有用的经验法则。这个法则常称为三法则。
析构函数与复制构造函数或赋值操作符之间的一个重要区别是,即使我们编写了自己的析构函数,合成析构函数仍然运行。
相关文章推荐
- C++ Primer(4th) Chapter13 复制控制
- C++ Primer 学习笔记_67_面向对象编程 --转换与继承、复制控制与继承
- 【C++ rimer 学习笔记】ch13 复制控制
- [C++] 第 13 章 复制控制 [C++ primer-on] 自我整理
- C++ Primer 学习笔记 — 复制控制
- 《C++ primer》第 13 章 复制控制
- C++ Primer 随笔 Chapter 13 复制控制
- C++ Primer 学习笔记_67_面向对象编程 -变换与继承、复制控制与继承
- C++ primer第二次阅读学习笔记(第13章:复制控制)
- C++ Primer 随笔 Chapter 13 复制控制
- C++ Primer学习系列(5):复制控制/重载操作与转换/面向对象编程
- C++ Primer 学习笔记_68_面向对象编程 -构造函数跟复制控制[续]
- 复制控制 - 1【C++ Primer 学习笔记 - 第十三章】
- C++ Primer 学习笔记十三 —— 复制控制
- C++ Primer 读书笔记 Charpter 13 复制控制
- C++ Primer复习和学习笔记 第十三章 复制控制
- C++ Primer学习笔记 — 复制控制与继承
- 13 复制控制 学习
- [C++] 第 13 章 复制控制 [C++ primer-on] 自我整理
- C++ primer 学习记录:面对对象编程之构造函数和复制控制