博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

C++ Primer 读书笔记 Charpter 13 复制控制

Posted on 2010-08-21 00:24  KurtWang  阅读(396)  评论(0编辑  收藏  举报
  1. 复制控制:赋值操作符,复制构造函数,析构函数
    1. 复制构造函数:是一种特殊构造函数,具有单个形参,该形参(常用const修饰)是对该类类型的引用。
    2. 析构函数:构造函数的互补,用来释放对象。不管是否显式定义了析构函数,编译器都会自动执行类中非static数据成员的析构函数。
    3. 赋值操作符:可以通过指定不同类型的右操作数而重载,右操作数为类类型的版本的比较特殊,如果我没定义,编译器会自动生成一个。
  2. 复制构造函数
    1. 用途:
      1. 根据另一个同类型对象显式或隐式初始化一个对象
      2. 复制一个对象,将它作为实参
      3. 从函数返回时复制一个对象
      4. 初始化顺序容器元素
      5. 根据元素初始化列表初始化数组元素
    2. C++两种初始化方式:直接初始化(将初始化式放在圆括号中),复制初始化(使用=)
        string empty_copy = string(); //copy init
        string empty_direct;   //direct init
    3. 合成的复制构造函数:执行逐个成员初始化
    4. 定义复制构造函数:Foo(const Foo&);
    5. 禁止复制:显式声明其复制构造函数为private
    6. 大多数类应定义复制构造函数和默认构造函数
  3. 赋值操作符:
    1. Sale_item& operator=(const Sale_item &);
    2. 合成的赋值操作符:逐个成员赋值
    3. 赋值操作符和复制构造函数通常看做一个单元,需要一个,肯定也需要另外一个。
  4. 析构函数
    1. 当对象的引用或指针超出作用域,不会运行析构函数。只有删除动态分配的对象的指针或实际对象(不是对象引用)超出作用域时,才会运行析构函数。
    2. 三法则:需要赋值操作符和复制构造函数的,通常也需要析构函数。
    3. 合成析构函数:按对象创建的逆序撤销每个非static成员