C++ Primer(4th) Chapter13 复制控制
2009-04-14 11:09
260 查看
复制构造函数(copy constructor):一种特殊的构造函数,具有单个形参,该形参(常用const修饰)是对该类类型的引用。当定义一个新对象并用一个同类型的对象对它进行初始化时,将显式使用复制构造函数。当将该类型的对象传递给函数或从函数返回该类型的对象时,将隐式使用复制构造函数。
析构函数(destructor):构造函数的互补。当对象超出作用域或动态分配的对象被删除时,将自动应用析构函数。析构函数可用于释放对象构造时或在对象的生命期中所获取的资源。不管类是否定义了自己的析构函数,编译器都自动执行类中非static数据成员的析构函数。
赋值操作符(assignment operator):与构造函数一样,赋值操作符可以通过指定不同类型的右操作数而重载。右操作数为类类型的版本比较特殊:如果我们没有编写这种把本,编译器将为我们合成一个。
直接初始化:直接将初始化式放在圆括号中。
复制初始化:使用=符号。
当用于类类型对象时:
直接初始化:直接调用与实参匹配的构造函数。
复制初始化:首先使用指定构造函数创建一个临时对象,然后用复制构造函数将那个临时对象复制到正在创建的对象。
合成复制构造函数:如果没有定义复制构造函数,编译器就会为我们合成一个。它的行为是,执行memberwise initialize。所谓“逐个成员”,指的是编译器将现有对象的每个非static成员,依次复制到正创建的对象。合成复制构造函数直接复制内置类型成员的值,类类型成员使用该类的复制构造函数进行复制,复制数组时将复制数组的每一个元素。
为了防止复制,可以显式声明类的复制构造函数为private。然而,类的友元和成员仍然可以进行复制。如果想要连友元和成员中的复制也禁止,就可以声明一个(private)复制构造函数但不对其定义。这样,使用未定义成员的任何尝试将导致链接失败。
撤销一个容器(不管是标准库容器还是内置数组)时,也会运行容器中的类类型元素的析构函数。容器中的元素总是按逆序撤销。
与复制构造函数或赋值操作符不同,编译器总是会为我们合成一个析构函数。合成析构函数按对象创建时的逆序撤销每个非static成员,因此,它按成员在类中声明次序的逆序撤销成员。如果类定义了析构函数,则在类定义的析构函数结束之后运行合成构造函数。
析构函数(destructor):构造函数的互补。当对象超出作用域或动态分配的对象被删除时,将自动应用析构函数。析构函数可用于释放对象构造时或在对象的生命期中所获取的资源。不管类是否定义了自己的析构函数,编译器都自动执行类中非static数据成员的析构函数。
赋值操作符(assignment operator):与构造函数一样,赋值操作符可以通过指定不同类型的右操作数而重载。右操作数为类类型的版本比较特殊:如果我们没有编写这种把本,编译器将为我们合成一个。
复制构造函数
C++支持两种初始化形式:直接初始化:直接将初始化式放在圆括号中。
复制初始化:使用=符号。
当用于类类型对象时:
直接初始化:直接调用与实参匹配的构造函数。
复制初始化:首先使用指定构造函数创建一个临时对象,然后用复制构造函数将那个临时对象复制到正在创建的对象。
合成复制构造函数:如果没有定义复制构造函数,编译器就会为我们合成一个。它的行为是,执行memberwise initialize。所谓“逐个成员”,指的是编译器将现有对象的每个非static成员,依次复制到正创建的对象。合成复制构造函数直接复制内置类型成员的值,类类型成员使用该类的复制构造函数进行复制,复制数组时将复制数组的每一个元素。
为了防止复制,可以显式声明类的复制构造函数为private。然而,类的友元和成员仍然可以进行复制。如果想要连友元和成员中的复制也禁止,就可以声明一个(private)复制构造函数但不对其定义。这样,使用未定义成员的任何尝试将导致链接失败。
析构函数
当对象的引用或指针超出作用域时,不会允许析构函数。只有删除指向动态分配对象的指针或实际对象(而不是对象的引用)超出作用域时,才会运行析构函数。撤销一个容器(不管是标准库容器还是内置数组)时,也会运行容器中的类类型元素的析构函数。容器中的元素总是按逆序撤销。
与复制构造函数或赋值操作符不同,编译器总是会为我们合成一个析构函数。合成析构函数按对象创建时的逆序撤销每个非static成员,因此,它按成员在类中声明次序的逆序撤销成员。如果类定义了析构函数,则在类定义的析构函数结束之后运行合成构造函数。
相关文章推荐
- C++ Primer 随笔 Chapter 13 复制控制
- C++ Primer 随笔 Chapter 13 复制控制
- 《C++ primer》第 13 章 复制控制
- C++ Primer学习之(13)——复制控制
- [C++] 第 13 章 复制控制 [C++ primer-on] 自我整理
- [C++] 第 13 章 复制控制 [C++ primer-on] 自我整理
- C++ Primer 读书笔记 Charpter 13 复制控制
- 重温C++ primer 之复制控制(复制构造函数,赋值操作符,析构函数)
- C++ Primer(十三) 复制控制
- C++ Primer 有感(复制控制)
- C++ primer第二次阅读学习笔记(第13章:复制控制)
- C++ Primer 有感(复制控制)
- C++ Primer 复制控制
- C++ Primer学习系列(5):复制控制/重载操作与转换/面向对象编程
- C++ Primer学习笔记 — 复制控制与继承
- 《C++ Primer》 第13章 复制控制
- C++ primer 学习记录:面对对象编程之构造函数和复制控制
- 【C++ rimer 学习笔记】ch13 复制控制
- 复制控制和继承--《C++ primer》笔记
- C++ Primer 4th Notes - Chapter 1 Getting Started