关于默认拷贝构造函数,有一点和默认构造函数类似,就是编译器只有在【需要的时候】才去合成默认的拷贝构造函数。
在什么时候才是【需要的时候】呢?
也就是类不展现【bitwise copy semantics】时,即不展现【逐位次拷贝】时,才会合成默认拷贝构造函数。
所谓的【逐位次拷贝】,也就是简单的赋值,不管类内的数据成员是int还是char*指针,都是简单的赋值,这叫【逐位次拷贝】。
那什么请下不展现【逐位次拷贝】呢?
有四种情况:
①类中有一个类对象成员,而该类对象成员声明了一个默认拷贝构造函数(不管这个默认拷贝构造函数是显式声明的还是编译器合成的)
②类继承自一个基类,而该基类有一个默认拷贝构造函数(不管这个默认拷贝构造函数是显式声明的还是编译器合成的)
③类声明了一个或多个虚函数时
④类派生自一个继承链,其中有一个或多个虚基类时