本文是 Inside The C++ Object Model's Chapter 2 的部分读书笔记。
有三种情况,需要拷贝构造函数:
1)object直接为另外一个object的初始值
2)object作为函数以值传递的参数
3) object以函数返回值形式返回
如果class没有提供一个explicit copy constructor时,编译器会以default memberwise initialization,也就是把每一个内建的或者派生的data member的值,从某个object直接拷贝到另外一个object上,对于member class object,以递归的方式施行memberwise initialization。
编译器并不会生成trivial的copy constructor,除非是bitwise copy semantics,以下四种情况就是非bitwise copy semantics:
1)class的某个member object声明有一个copy constructor时,这个copy constructor不会是被设计者声明的,或者是被编译器合成的
2)class继承自的base class含有copy constructor时
3)class含有virtual functions
4)class的base class是virtual时
编译器需要合成copy constructor,并且调用member object或者base class的copy constructor。
对于virtual function或者virtual inheritanceÿ