实现copy assignment operator

为何需要? :::info 默认情况下将某个类对象赋值给另一个类对象,会执行默认的成员逐一复制 ::: 但是若是对象在堆区开辟了空间,那么则需要自定义copy assignment operator

  1. Class Matrix{
  2. public:
  3. Matrix(int nums);
  4. ~Matrix(){
  5. delete[] ptr;
  6. }
  7. private:
  8. int* ptr;
  9. int _nums;
  10. };
  11. Matirx::Matrix(int nums){
  12. this->_nums=nums
  13. this->ptr=new int[nums];
  14. }
  15. Matrix& Matrix::operator=(Matrix &rhs){
  16. if(this!=&rhs){
  17. _nums=rhs._nums;
  18. delete [] ptr;
  19. ptr=new int[_nums];
  20. for(int i=0;i<nums;i++){
  21. ptr[i]=rhs.ptr[i];
  22. }
  23. }
  24. return *this;
  25. }

实现一个function object

:::info 函数对象又叫仿函数/谓词
实际上是一个对象, 他的类对小括号运算符做了重载,因此可像调用函数一样使用他 :::

  1. bool LessThan::operator()(int val)const{return val>xxx;}
  2. //----------------------------------------------
  3. Lessthan lt;
  4. find_if(it,it_end,lt);
  5. //找到比xxx小的

返回值为bool的函数对象又被叫做谓词;

小结

  • 类似赋值时的操作, 对于拷贝运算符有时也需要重构(深拷贝和浅拷贝的区别)
  • 可以重载类中的()运算符, 使得对象能够起到函数的效果; 即为仿函数/函数对象/谓词;