0%

在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条后再来补充