benxintuzi

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

当我们定义一个类时,如果没有声明任何函数,那么C++编译器会默认提供4个函数:默认构造函数、复制构造函数、赋值操作符函数、析构函数,并且这些函数默认都是public且inline的。因此,当你定义如下类:

 1 class Empty
 2 {
 3     
 4 };
 5 
 6 // 等价于定义如下类:
 7 class Empty
 8 {
 9 public:
10     Empty(){ }                              // default构造函数
11     Empty(const Empty& rhs){ }              // copy构造函数
12     ~Empty(){ }                             // 析构函数
13     Empty& operator=(const Empty& rhs){ }   // copy assignment操作符
14 };

只有当这些函数需要被调用时,编译器才会创建它们,如下为例子:

Empty e1;                // 调用默认构造函数,结束后调用析构函数

Empty e2(e1);            // 调用复制构造函数

e2 = e1;                 // 调用复制赋值操作符

 

区分复制构造函数和赋值操作符函数:

复制构造函数:用一个已有的对象去初始化一个正在创建的对象。

赋值操作符函数:用一个已有的对象赋值给另一个已存在的对象。

 

注意:

如果一个类中含有reference或者const成员,则编译器不会提供默认的copy assignment函数。

如果base类中的copy assignment函数被定义为private,则编译器不会为其derived类提供默认的copy assignment函数。

 

posted on 2015-05-25 08:24  benxintuzi  阅读(289)  评论(0)    收藏  举报