您的位置:首页 > 编程语言 > C语言/C++

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:

析构函数

析构函数可以完成所需资源回收,作为类构造函数的补充。

如果类需要析构函数,则它也需要赋值操作符和复制构造函数。这是一个有用的经验法则。这个法则常称为三法则

析构函数与复制构造函数或赋值操作符之间的一个重要区别是,即使我们编写了自己的析构函数,合成析构函数仍然运行
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息