合成的拷贝构造函数和合成的默认构造函数一样,也是在必要的时候才由编译器产生出来。这里的“必要”是指类不展现bitwise copy semantics时。

一般,类如C语言中仅包含内建数据类型的结构体一样,则是具有bitwise copy semantics的,编译器不合成拷贝构造函数。

有四种情况一个类不展现出bitwise copy semantics:

1. 当class内含一个member object而后者的class声明有一个copy constructor(不论是被设计者明确地声明,或是被编译器合成)。

2. 当class继承自一个base class而后者存在有一个copy constructor时(同上)。

3. 当class声明了一个或多个virtual functions时。

4. 当class派生自一个继承链,其中有一个或多个virtual base classes时。