copy构造函数被用来"以同型对象初始化醉卧对象",copy assignment操作符被用来"从另一个同型对象中拷贝其值到自我对象":
#include "stdafx.h"
#include <iostream>
using namespace std;
class Widget
{
public:
Widget();//默认构造函数
Widget(const Widget& rhs);//复制构造函数
Widget& operator = (const Widget& rhs);//赋值操作符
};
int _tmain(int argc, _TCHAR* argv[])
{
Widget w1;//调用默认构造函数
Widget w2(w1);//复制构造函数
w1= w2;//赋值操作符
return 0;
}
当你看到赋值符号时请小心,因为"="语法也可以用来调用copy构造函数:
Widget w3=w2;//调用复制构造函数
区别方法:如果一个新对象被定义,一定会有一个构造函数被调用,不可能调用赋值操作。如果没有新对象被定义(例如前述的"w1=w2"语句),就不会有构造函数被调用,那么当然就是赋值操作被调用。
复制构造函数是一个尤其重要的函数,因为它定义了一个对象如何以值传递。例如:
bool hasAcceptableQuality(Widget w)//一个这样的方法
...
Widget aWidget;
if(hasAcceptableQuality(aWidget));
这里 参数w是以by value方式传递给方法的,所以上述调用中aWidget被复制到w体内。这个复制动作由Widget的copy构造函数完成。Pass-by-value意味"嗲用copy构造函数".以by value传递用户自定义类型通常是个话注意。