分类: C/C++
2012-07-28 21:14:29
拷贝构造方法的定义:
A non-template constructor for class X is a copy constructor if its first parameter is of type X&, const X&, volatile X& or const volatile X&, and either there are no other parameters or else all other parameters have default arguments (8.3.6).
即拷贝构造方法必须符合以下两个特征:
1)是一个构造方法,且第一个参数是 Class&,const Class&,volatile Class& 或者 const volatile Class& 类型的形参,其后没有其它形参或者是全有默认实参的形参。
2)不是模版方法。
默认赋值操作的定义:
A user-declared copy assignment operator X::operator= is a non-static non-template member function of class X with exactly one parameter of type X, X&, const X&, volatile X& or const volatile X&.
即默认赋值操作必须符合以下三个特征:
1)只能有一个形参,且其类型是 Class,Class&,const Class&,volatile Class& 或者 const volatile Class& 类型的形参。
2)不是模版方法。
3)不是静态方法。
如果一个类没有定义拷贝构造方法或者默认赋值操作,则编译器会为它自动生成一个拷贝构造函数和一个默认赋值操作的缺省实现:
1)拷贝构造方法的缺省实现是 对所有成员变量依次调用默认复制构造方法。
2)默认赋值操作的缺省实现是 对所有成员变量依次调用默认赋值操作。
一般来说,若需要自定义拷贝构造方法,则一定要重载默认赋值操作,反之亦然。因stl库中使用了如同 T a = T(); 类似语句,所以拷贝构造方法不应指定explicit关键字。
示例代码:
当 1)将对象作为实参传给形参时 2)某个方法return结果时 都会调用该类的拷贝构造方法。