实现copy assignment operator
为何需要? :::info 默认情况下将某个类对象赋值给另一个类对象,会执行默认的成员逐一复制 ::: 但是若是对象在堆区开辟了空间,那么则需要自定义copy assignment operator
Class Matrix{
public:
Matrix(int nums);
~Matrix(){
delete[] ptr;
}
private:
int* ptr;
int _nums;
};
Matirx::Matrix(int nums){
this->_nums=nums
this->ptr=new int[nums];
}
Matrix& Matrix::operator=(Matrix &rhs){
if(this!=&rhs){
_nums=rhs._nums;
delete [] ptr;
ptr=new int[_nums];
for(int i=0;i<nums;i++){
ptr[i]=rhs.ptr[i];
}
}
return *this;
}
实现一个function object
:::info
函数对象又叫仿函数/谓词
实际上是一个对象, 他的类对小括号运算符做了重载,因此可像调用函数一样使用他
:::
bool LessThan::operator()(int val)const{return val>xxx;}
//----------------------------------------------
Lessthan lt;
find_if(it,it_end,lt);
//找到比xxx小的
小结
- 类似赋值时的操作, 对于拷贝运算符有时也需要重构(深拷贝和浅拷贝的区别)
- 可以重载类中的()运算符, 使得对象能够起到函数的效果; 即为仿函数/函数对象/谓词;