一、何时合成Default Constructor及其行为
下面程序段不会合成一个default constructor
#include <iostream>
#include <stdlib.h>
using namespace std;
class Foo{
public:
int val;
Foo *pnext;
};
void foo_bar()
Foo bar;
if(bar.val||bar.pnext){
cout<<"var:"<<bar.val<<endl;
cout<<"pnext:"<<bar.pnext->val<<endl;
}
}
int main()
{
foo_bar();
system("pause");
return 0;
}
何时合成:编译器需要之时
行为:只执行编译器所需之行动
因此,即使有需要为class Foo合成一个default constructor,也不会将val 和 pnext初始化为0
故如需初始化,应提供明显的default constructor
二、nontrivial default constructor的四种情况“
1.带有“default consrtructor ”的成员类对象
2.带有“default consrtructor ”基类
3.带有“一个virtual Function”的基类