优雅的处理自我赋值
之前写过一个简单的vector,Clang-tidy警告:
Operator=() does not handle self-assignment properly
为什么要警惕自我赋值呢?一个经典的例子是当你赋值的时候需要先删除原来的值时,不做处理的自我赋值就会造成错误。
例如如下代码:
1 | class T { |
这时如果有一个T
类型的变量a
, 并且执行a = a
的话,就会出现错误。
一种显然的解决办法是,先判断是否为自己,如果是,则不做处理。
代码如下:
1 | class T { |
这样的代码就完美了吗,并没有,
1 | class T { |
未完待续。。。
- bugprone-unhandled-self-assignment:https://releases.llvm.org/13.0.0/tools/clang/tools/extra/docs/clang-tidy/checks/bugprone-unhandled-self-assignment.html
- OOP54-CPP. Gracefully handle self-copy assignment:https://wiki.sei.cmu.edu/confluence/display/cplusplus/OOP54-CPP.+Gracefully+handle+self-copy+assignment