• 复制控制


    复制控制是定义任意 C++ 类必不可少的部分。

    当定义一个新类型的时候,需要显式或隐式地指定复制、赋值和撤销该类型的对象时会发生什么。
    以上这些是通过定义复制构造函数、赋值操作符和析构函数来达到的。

    如果没有显式定义复制构造函数或赋值操作符,编译器(通常)会为我们定义。

    复制构造函数,具有单个形参,该形参(常用 const 修饰)是对该类类型的引用。
    1) 当定义一个新对象并用一个同类型的对象对它进行初始化时,将显式使用复制构造函数。
    2) 当将该类型的对象传递给函数或函数返回该类型的对象时,将隐式使用复制构造函数。

    析构函数:当对象超出作用域或动态分配的对象被删除时,将自动应用析构函数。
    1) 析构函数可用于释放对象时构造或在对象的生命期中所获取的资源。
    2) 不管类是否定义了自己的析构函数,编译器都自动执行类中非 static 数据成员的析构函数。

    与构造函数一样,赋值操作符可以通过指定不同类型的右操作数而重载。
    右操作数为类类型的版本比较特殊:如果我们没有编写这种版本,编译器将为我们合成一个。

    复制构造函数、赋值操作符和析构函数总称为复制控制。
    编译器自动实现这些操作,但类也可以定义自己的版本。


    通常,编译器合成的复制控制函数是非常精练的,
    但对某些类而言,依赖于默认定义会导致灾难。
    实现复制控制操作最困难的部分,往往在于识别何时需要覆盖默认版本。
    当类具有指针成员的情况时通常需要类定义自己的复制控制成员。

    编写自己的复制构造函数时,必须显式复制需要复制的任意成员。
    显式定义的复制构造函数不会进行任何自动复制。

    (PS:“复制控制” 这一章感觉是需要精读的章节,先了解个大概,等待下次专攻。)

  • 相关阅读:
    Redis基础
    MySQL基础
    MySQL基础
    MySQL基础
    MySQL基础
    Hello 博客园
    Linux | 常用命令
    JVM | 性能调优
    JVM | 垃圾回收
    学习笔记 | 分布式技术
  • 原文地址:https://www.cnblogs.com/yshl-dragon/p/3256731.html
Copyright © 2020-2023  润新知