条款5:了解C++提供的默认函数

当我们定义一个类时,如何没有声明任何函数,那么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函数。

 

你可能感兴趣的:(C++)