C++ 在 operator=() 處理 self assignment
self assignment:object 被 assign 給自己。
class member 有 pointer 時寫 operator=()
要小心處理 self assignment。如果先把自己原本的 member delete 掉,等同把 rhs 的 member 也 delete 掉,assign 後會得到爛掉的 pointer。
1 | Foo& Foo::operator=(const Foo& rhs) |
這做法可以處理 member pointer 但會讓 member pointer 指的位置經過 self assignment 後變得不同,另一種做法是檢查 this
是否跟 &rhs
相同,不同時才真的做 copy。
Ref
- 《Effective C++》