标签:
当我们定义一个类时,如何没有声明任何函数,那么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函数。
标签:
原文地址:http://www.cnblogs.com/benxintuzi/p/4527016.html