读《C++对象模型》- 构造函数语意学
一、Default Constructor C++新手一般有两个误解: 任何class如果没有定义default constructor,就会被合成出一个来。 编译器合成出来的default constructor会明确设定”class内每一个data member的默认值”。 有四种情况,会导致“编译器必须为未声明constructor之classes合成一个default constructor“。C++ Standard把那些合成物称为implicit nontrivial default constructors(隐式并有价值的默认构造函数)。至于没有存在那四种情况而又没有声明任何constructor的classess,则说它们拥有的是implicit trivial default constructors,它们实际上并不会被合成出来。那么这四种有价值的默认构造函数分别是: 带有Default Constructor的Member Class Object。 带有Default Constructor的Base Class。 带有一个Virtual Function的Class。 带有一个Virtual Base Class的Class(Virtual Base Class是用来被虚拟继承的基类,防止在一个对象中重复出现几个基类)。 对于”带有Default Constructor的Member Class Object”,编译器会扩张已存在的construtors,没有则会合成只满足编译器需要的default constructor。然后在constructors中安插一些代码,使得user code在被执行之前,先调用必要的member class objects’ construtors,有多个member … Continue reading