Default Constructor的构造操作:
什么时候才会合成一个default Construct,当编译器需要它的时候,此外,被合成出来的Construct只执行编译器所需要的行动。
Nontivial default constructor的4种情况:
1.带有Default Constructor的Member Class Object
编译器如何避免合成多个default Constructor 以inline方式完成。一个inline函数有静态链接,不会被文件以外者看到,如果太复杂就会合成一个explicit non-inline static实例。
编译器会扩张Constructor在user code被执行之前,先调用必要的default Constructor,以Members声明的顺序调用。
2.带有Default Constructor的Base Class
3.带有一个virtual function的class:
Class声明一个virtual function,
Class 派生一个继承串链,其中一个或更多的virtual base classes
在合成的default Constructor中,只有base class subobjects和Members class objects会被初始化。所有其他的nonstatic data member都不会被初始化。如果程序员需要把某个指针设为0的default Constructor,那么提供它的应该是程序员。
Copy Constructor4个条件和上面内似。
深拷贝与浅拷贝:关于动态内存时注意定义。
Default Memberwise Initialization
当class obeject以相同class的另一个object作为初值,其内部是以所谓的Default Memberwise Initialization手法完成的,也就是把每一个内建的或派生的data member的值,从某个Object拷贝一份到另一个Object身上。不过它并不拷贝其中的Members class object,而是以递归的方式实行。
Bitwise Copy Semantics(浅拷贝)
NRV
List中的项目顺序是由class中的Members声明决定的,不是由list中排序决定的。