先来看一个例子:
#include <iostream>
using namespace std;
class test{
public:
test(){cout<<"test()"<<endl;}
//protected:
test(test&){cout<<"test(test&)"<<endl;}
void operator=(const test&){cout<<"operator="<<endl;}
};
int main(){
test t; //test()
test p(t); //test(test&)
test p1 = t; //test(test&)
return 0;
}
C++默认
如果在类中没有显式地声明一个拷贝构造函数,那么,编译器将会自动生成一个默认的拷贝构造函数,该构造函数完成对象之间的位拷贝,位拷贝又称浅拷贝。也就是说默认的C++类是允许复制的。那么如何实现一个不能拷贝的类呢?只需要将上面代码的注释打开。用protected或者private修饰重写的拷贝构造函数即可。这时候test p(t);test p1 = t;2个语句就会报错