对象拷贝语意学
对象拷贝语意学
一个class对于默认的copy assignment operator,在以下情况,不会表现出bitwise copy语意:
1.当class内含有一个member object,而其class有一个copy assignment operator时
2.当一个class的base class有一个copy assignment operator时
3.当一个class声明了任何virtual functions时(一定不要拷贝右端class object的vptr地址,因为它可能是一个derived class object)
4.当class继承自一个virtual base class时(无论此base class有没有copy operator)时
C++标准上说,copy assignment operator在不表现出bitwise copy semantics时,是nontrivial的,只有nontrivial的实例才会被合成出来
以上面的2.为例子看看编译器合成的copy assignment operator是什么样子,在为Point类显式定义一个copy assignment operator,然后Point3d继承类Point,但是不显式定义copy assignment operator: