1、用一个已存在的对象去构造一个不存在的对象(构造之前不存在),就是拷贝构造。用一个已存在的对象去覆盖另一个已存在的对象,就是赋值运算。
String(const char *str = NULL);// 普通构造函数
String(const String &other); // 拷贝构造函数
拷贝构造函数将在对象传值,返回值,抛出异常中被调用。
2、“引用”不可能是NULL,而“指针”可以为NULL。
注意函数strlen返回的是有效字符串长度,不包含结束符‘\0’。函数strcpy则连‘\0’一起复制。
3、应该为所有包含动态分配成员的类都提供拷贝构造函数,析构函数,赋值运算符。
4、拷贝构造函数与赋值运算符
A b=a; //拷贝构造函数调用
A b(a); //拷贝构造函数调用
b =a; //赋值运算符调用
5、对于一个类X, 如果一个构造函数的第一个参数是下列之一:
a) X&
b) const X&
c) volatile X&
d) const volatile X&
且没有其他参数或其他参数都有默认值,那么这个函数是拷贝构造函数。
原文:
http://blog.csdn.net/lwbeyond/article/details/6202256
http://baike.baidu.com/view/1266959.htm