请给出一个自赋值的例子
时间: 2024-03-24 22:40:15 浏览: 12
假设有一个自定义的类 `MyClass`,它有一个成员变量 `int* data`,指向一个动态分配的整型数组。如果在重载等于号操作符时不考虑自赋值的情况,可能会导致出现问题,例如:
```
MyClass& MyClass::operator=(const MyClass& other) {
if (this == &other)
return *this;
delete[] data;
data = new int[10];
memcpy(data, other.data, sizeof(int) * 10);
return *this;
}
```
在上面的例子中,如果出现自赋值的情况,即 `a = a`,则会导致 `delete[] data` 删除了原来的数据,然后 `data = new int[10]` 又分配了一段新的内存,最终导致对象的状态出现不可预期的错误。为了避免这种情况,可以在重载等于号操作符时加入自赋值判断,例如:
```
MyClass& MyClass::operator=(const MyClass& other) {
if (this == &other)
return *this;
delete[] data;
data = new int[10];
memcpy(data, other.data, sizeof(int) * 10);
return *this;
}
```
在上面的例子中,如果出现自赋值的情况,即 `a = a`,则会直接返回当前对象,不做任何操作,确保对象的状态不会受到影响。