如果没有定义,编译器会为你产生四个函数:
(1) 默认构造函数
(2) Copy构造函数:将来源对象的每一个non-static成员变量拷贝至目标对象
(3) 赋值构造函数:如果你打算在一个“内含reference成员”的class内支持赋值操作,或者内含const成员,你必须自己定义assignment操作(引用和const的特性所决定);如果某个class的base calss的copy assignment操作为private,则编译器拒绝为子类(derived class)生成一个copy assignment
(4) 析构函数:编译器产生的析构函数是non-virtual,除非这个class的base class自身声明有virtual析构函数
注意这些函数都是public且是inline的。并不是说编译器一定会为你产生这些函数,而是说,当这些函数被调用时,它们才会被编译器创建出来。
参考:Effective C++ 3rd(侯捷译)