1.何为自我赋值
会调用operator=,如果自己没写,编译器生成默认的。
上述代码在进行自我赋值的时候,先delete掉了原来的,然后new的时候肯定失败,因为原来的被delete掉了。
可以先进行证同测试,然后再new。不过此时仍然存在异常安全问题,如果new失败了,pb将指向一块被删除的区域。
2.copy and swap
参考链接:Copy-and-swap idiom详解和实现安全自我赋值
会调用operator=,如果自己没写,编译器生成默认的。
上述代码在进行自我赋值的时候,先delete掉了原来的,然后new的时候肯定失败,因为原来的被delete掉了。
可以先进行证同测试,然后再new。不过此时仍然存在异常安全问题,如果new失败了,pb将指向一块被删除的区域。
参考链接:Copy-and-swap idiom详解和实现安全自我赋值
相关文章: