【c++ Primier】第十三章 复制控制

        复制构造函数、赋值操作符和析构函数总称为复制控制。

  • 复制构造函数是一种特殊构造函数,具有单个形参,该形参(常用const修饰)是对该类类型的引用。当定义一个新对象并用一个同类型的对象对它进行初始化时,将显式使用复制构造函数。当将该类型的对象传递给函数或从函数返回该类型的对象时,将隐式使用复制构造函数。
  • 析构函数是构造函数的互补
    • 当对象超出作用域或动态分配的对象被删除时,将自动应用析构函数。不管类是否定义了自己的析构函数,编译器都自动执行类中非static数据成员的析构函数。
  • 与构造函数一样,赋值操作符可以通过指定不同类型的右操作符而重载。
  • 有一种特别常见的情况需要类定义自己的复制控制成员的:类具有指针成员。

1. 复制构造函数

1)复制构造函数可用于:

  • 根据另一同类型的对象显式或隐式初始化一个对象。
  • 复制一个对象,将它作为实参传给一个函数。
  • 从函数返回时复制一个对象。
  • 初始化顺序容器中的元素。
  • 根据元素初始化式列表初始化数组元素。

2)合成的复制构造函数

  • 与合成的默认构造函数不同,即使我们定义了其他构造函数,也会合成复制构造函数。合成复制构造函数的行为是,执行逐个成员初始化,将新对象初始化为原对象的副本。

3)为了防止复制,类必须显式声明其复制构造函数为private。如果复制构造函数是私有的,将不允许用户代码复制该类类型的对象,编译器将拒绝任何进行复制的尝试。然而,类的友元和成员仍可以进行复制。如果想要连友元和成员中的复制也禁止,就可以声明一个private复制构造函数但不对其定义。

4)一般来说,最好显式或隐式定义默认构造函数和复制构造函数。只有不存在其他构造函数时才合成默认构造函数。如果定义了复制构造函数,也必须定义默认构造函数。

2. 赋值操作符

        应将复制和赋值这两个操作符看做一个单元。如果需要其中一个,我们几乎也肯定需要另一个。

3. 析构函数

1)当对象的引用或指针超出作用域时,不会运行析构函数。只有删除指向动态分配对象的指针或实际对象(而不是对象的引用)超出作用域时,才会运行析构函数。

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

3)与复制构造函数或赋值操作符不同,编译器总是会为我们合成一个析构函数。合成析构函数按对象创建时的逆序撤销每个非static成员,因此,它按成员在类中声明次序的逆序撤销成员。对于类类型的每个成员,合成析构函数调用该成员的析构函数来撤销对象。

4)合成析构函数并不删除指针成员所指向的对象。

5)析构函数是个成员函数,它的名字是在类名字之前加上一个代字号(~),它没有返回值,没有形参。因此,不能重构析构函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C primier是一本经典的计算机编程教材,被广泛认可为学习C语言程序设计的参考用书。很多计算机专业的学生和从事编程工作的人员都会选择阅读和学习这本书。 现在我们来讨论一下如何下载C primier。 首先,我们需要找到一个可靠的来源来下载C primier。可以选择从官方网站或者其他信誉较高的在线书店进行下载。确保所选择的来源是安全可靠的,以避免下载到带有恶意软件的文件。 其次,打开所选择的下载来源页面,并在搜索框中输入“C primier”。通常会有多个版本可供选择,要根据个人需求和目标来选择适合自己的版本。 接下来,点击选择的版本并查看下载选项。常见的下载选项有PDF、EPUB、MOBI等格式。根据使用的设备和个人爱好选择合适的格式进行下载。 在点击下载之前,可能需要进行注册或登录。根据下载来源的要求,进行相应的操作。 完成注册或登录后,选择下载选项并点击下载按钮。下载过程可能需要花费一定时间,取决于网络的速度和文件的大小。 下载完成后,将文件保存到合适的位置,比如计算机的文件夹或移动设备的存储空间。 最后,打开下载的文件并开始阅读C primier。 总之,下载C primier是一件相对简单的事情,只需要选择可靠的下载来源,选择适合自己的版本和格式,完成注册或登录,进行下载并保存文件,最后就可以开始阅读和学习了。希望这些步骤对您有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值