一、只有当class不展现出bitwise copy semanties时,编译器才会为class生成copy constructor。那么当什么时候回出现非bitwise copy呢?
1、当class内含一个member object而后者的class声明有一个copy constructor时(不论是显示声明或是被合成得到的);
2、当class继承自一个base class而后者存在一个copy constructor时。
3、当class声明了一个或多个virtual functions时:当一个base class object以其derived class的object内容做初始化操作时,其vptr复制操作必须保证安全。
4、当class派生自一个继承串链,其中有一个或多个virtual base classes时。必须保证“位置的正确性”,而“Bitwise copy constructor”可能会破坏这个位置,所以编译器必须合成出自己的。
二、被合成出来的copy constructor中,如整数、指针、数组等等的nonclass members也都会被复制。
时间: 2024-10-22 00:44:44