在C++中,会有三种情况以一个对象作为另一个对象的初值,分别为:
1.
class X
{
…
};
X x;
X xx = x;
2.
void fun(X x);
X xx;
Fun(xx);
3.
X fun()
{
Xxx;
return xx;
}
在以上三种情况中,编译器会在必要的时候合成拷贝构造函数。那么何为必要的时候呢?首先看这样一种情况:
class String
{
public:
//………没有显示声明拷贝构造函数
public:
char*str;
intlen;
};
String obj(“hello”);
String Obj = obj;
这种情况下,会以一种叫做Default memberwise initialization的手法来完成初始化Obj,这就相当于分别对每一个成员进行初始化,也就是所谓的逐位拷贝:
Obj.str = obj.str;
Obj.len = obj.len;
但是当String的对象作为了一个类成员变量时,情况有所改变,比如:
class Word
{
public:
//….没有提供显示的拷贝构造函数
p