- 拷贝构造函数的形式 T::T(const T&)或者 T::T(T&)
- 默认的拷贝构造函数是T::T(const T&)
- 拷贝构造函数是所有类的隐式定义函数。
class CTest {
public:
CTest(int i);
virtual ~CTest();
CTest(const CTest&);
private:
CTest& operator=(const CTest&);
} ;
例1:
//采用默认的拷贝构造函数构造t1, 而且由于是针对临时对象CTest(1)的拷贝构造
//此处省略了对其的拷贝构造.拷贝构造函数可以不定义。
CTest t1 = CTest(1);
CTest t1(1); // 和上例效果相同.
CTest t1(CTest(1)); // 和上例效果相同.
例2:
CTest t2;
CTest t1(t2); // 采用拷贝构造函数, 而且拷贝构造函数必须定义否则链接错误.
例3:
CTest t1;
t1 = CTest(1); //采用默认的拷贝赋值函数初始化t1
例4:
如果拷贝构造函数声明为私有,则例1CTest t1 = CTest(1); 出现编译错误。原因是虽然临时对象的构造省略但是其相关的语义需要尊重。