在operator= 中处理“自我赋值”
使用operator=对自己进行赋值首先没有意义,其次,如果存在动态申请的资源的话,可能会产生一些问题,例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| class AClass { private: int *data; public: AClass() { data = new int[100]; } int* getData() { return data; } AClass& operator=(const AClass& another) { delete data; data = another.data; return *this; } };
|
如果在operator=函数中的another和*this是同一个对象,那么就会导致自身的数据被删除。
所以应该在operator=中避免自我赋值
通常处理自我赋值有一下几种实现方式:
//TODO:看了29条后再来补充