初始化列表:通常使用初始化是为了提高效率,它直接调用与实参匹配的构造函数。【因为一般在构造函数体内的复制也经过初始化-->计算赋值(此时会调用复制构造函数)两个阶段】;特别的有些时候只能用初始化列表,即不能赋值的参数,如:const或引用类型的成员,没有默认构造函数的类类型成员。初始化列表中变量的初始化顺序是先声明的先初始化.
class cl1{ private: const int ci; int &ri;}; //ci,ri只能在初始化列表中进行初始化。
默认构造函数:全部形参是默认实参的构造函数也是默认构造函数。
只要自己定义了(任意的)构造函数,编译器就不会为我们合成默认构造函数。
复制构造函数:单个形参为本类类型对象的引用的构造函数。对于不支持复制的类型(如IO类型)不能用复制构造函数。如果自己定义了复制构造函数(而不是构造函数,即:只定义构造函数,但没有定义复制构造函数,则编译器合成复制构造函数),则编译器不会合成复制构造函数。【复制构造函数需要特别注意指针成员,以后将说明】
ifstream file1("filename1"); //ok, direct initialization.
ifstream file2="filename2"; //error
如何防止复制:可以通过将复制构造函数声明为private来禁止普通函数(非成员,非友元函数)的访问;可以通过声明一个private复制构造函数而不对其定义来禁止成员函数和友元函数的访问。
文章来源:http://liyuxia-life.spaces.live.com/Blog/cns!DA1B364675ACF35!254.entry