本文参考了 侯捷译的 <inside the c++ object model>~~
四种情况下,c++会为class A创建默认构造函数,分别是
1. 类A中包含带有构造函数的成员数据B~
1 #include <iostream> 2 3 4 using namespace std; 5 6 class Foo 7 { 8 public: 9 Foo() 10 { 11 cout<<"A construct func called"<<endl; 12 }; 13 }; 14 15 class Bar 16 { 17 private: 18 Foo foo; 19 }; 20 21 22 int main() 23 { 24 Bar bar; 25 return 0; 26 }
2. 类A的基类中包含构造函数~
1 #include <iostream> 2 3 4 using namespace std; 5 6 class Foo 7 { 8 public: 9 Foo() 10 { 11 cout<<"A construct func called"<<endl; 12 }; 13 }; 14 15 class Bar : public Foo 16 { 17 private: 18 int trival; 19 }; 20 21 22 int main() 23 { 24 Bar bar; 25 return 0; 26 }
3. A中有成员虚函数或者基类中有成员虚函数~
4. A虚继承了别的类~
两个误解:
1. 任何class,如果没有显式定default constructor,就会被合成出一个来【上诉四种情况之一才会被构造】
2. 编译器合成出来的default constructor 会明确的设定 class内每一个data member的默认值