区别
调用拷贝构造
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;
};