1.何为自我赋值

effective c++:条款11:在operator=中处理自我赋值;条款12:复制对象时勿忘其每一个成分
会调用operator=,如果自己没写,编译器生成默认的。
effective c++:条款11:在operator=中处理自我赋值;条款12:复制对象时勿忘其每一个成分
上述代码在进行自我赋值的时候,先delete掉了原来的,然后new的时候肯定失败,因为原来的被delete掉了。
effective c++:条款11:在operator=中处理自我赋值;条款12:复制对象时勿忘其每一个成分
可以先进行证同测试,然后再new。不过此时仍然存在异常安全问题,如果new失败了,pb将指向一块被删除的区域。

2.copy and swap

参考链接:Copy-and-swap idiom详解和实现安全自我赋值
effective c++:条款11:在operator=中处理自我赋值;条款12:复制对象时勿忘其每一个成分
effective c++:条款11:在operator=中处理自我赋值;条款12:复制对象时勿忘其每一个成分

更简洁的写法

effective c++:条款11:在operator=中处理自我赋值;条款12:复制对象时勿忘其每一个成分

其实是把锅给了拷贝构造函数!

3.复制对象时勿忘其每一个成分(主要是继承关系中的拷贝)

effective c++:条款11:在operator=中处理自我赋值;条款12:复制对象时勿忘其每一个成分
effective c++:条款11:在operator=中处理自我赋值;条款12:复制对象时勿忘其每一个成分
effective c++:条款11:在operator=中处理自我赋值;条款12:复制对象时勿忘其每一个成分

注意在派生类的拷贝构造函数与operator=中对基类对象进行拷贝。

相关文章: