16:在operator=中为所有data member赋值
这是毫无疑问的,如果有部分data member没有被赋值,那么被赋值的对象不就是残废了的吗!有时候我们可能会在为类加data member的时候忘了再operator=中为它赋值了,或是在子类的operator=中忘了为父类的data member赋值。当然这些都不是重点,不记得不是问题,出错了自然就知道了,为父类的data member赋值只需要在子类的operator=中加上Base::operator=(this);如果编译器不支持调用base的operator=的话,可以做类型转换啊,static_case<&Base>(*this)=Derived;我发现在类型转换中,转换成的类型一般都是指针或是引用,特别是转换类型在左边的时候就一定不能是by value的方式,会产生临时变量,然后给临时变量赋值,当然不是你想要的。在为指针类型的data member 赋值时要记住一点,是为指针所指的对象赋值,而不是为指针赋值,如果你让data member一会儿指向这一会指向那的,可能会出现某些地址不可到达而出现内存泄露。
在为一个对象赋值之前,先要确认这个对象是否动态配置内存,如果动态配置内存,先要回收掉这块内存,不然当这个对象被赋值,指向别的地址后就会出现内存泄露,当然也不能一发现它动态配置内存了就把它先回收掉,因为可能出现把自己赋给自己的情况,你总不能因为把自己赋给自己之后,自己就莫名其妙的被回收了吧,所以在operator=中药检查是否自己赋值给自己。