复制控制:拷贝构造、赋值操作符

区别

调用拷贝构造

Teacher t2 = t1;    //类类型,复制初始化时调用拷贝构造函数,直接初始化调用对应构造函数

调用赋值运算符

Teacher t2;
t2 = t1;

拷贝构造函数

单形参、且形参类型为该类类型的引用 (常const修饰)的构造函数

class Test{
public:
  Test(){
    data = 0;
  }
  Test(int d):data(d){
  }
  ~Test(){
  }

  Test(const Test &test)
   {
    data = test.data;
  }
private:
  int data;
};

如果形参为引用,调用拷贝构造函数

void func(const string &s1);    //隐式调用string拷贝构造

赋值操作符

class Test{
public:
  Test(){
    data = 0;
  }
  Test(int d):data(d){
  }
  ~Test(){
  }

  //重载=号运算符                                            
  Test& operator= (const Test &t){
    if(this != &t){    //防止自赋值
      data = t.data;
    }
    return *this;
  }
private:
  int data;
};

禁止拷贝

私有拷贝构造和赋值操作符

class Test{
public:
  Test(){
    data = 0;
  }
  Test(int d):data(d){
  }
  ~Test(){
  }
private:
  //  禁止拷贝                                         
  Test& operator= (const Test &);
  Test(const Test&);
  int data;
};

猜你喜欢

转载自www.cnblogs.com/xiongyungang/p/11361438.html