一个类可以第一次生成实例时,仅可以通过1:构造函数 或者 2:copy构造函数生成!
深拷贝,前拷贝:仅发生在1:copy构造函数 或2:copy assignment函数里!
资源申请仅发生在:1:构造函数 或2:copy assignment函数里
也就是说,copy构造函数任务重大!要完成两个任务!
构造函数,及赋值函数仅完成各自的任务即可!
今天,因为copy构造函数仅完成了深拷贝,没有完成资源申请的任务debug的好长时间,当是一次复习吧。
copy构造函数的完整特别重要!!!
当类内部涉及到指针时,要么完整的实现该函数,要么
私有化声明下!
////////////////////
ClassA a(); // :调用构造函数
////////////////////
ClassA b=a; // :调用copy构造函数 相当于 classA b(a);
////////////////////
ClassA ClassA::operator+(const ClassA& rhs)
{
ClassA tmp;
return tmp; // :调用copy构造函数,返回一个临时变量
}
///////////////////
ClassA a;
ClassA b;
ClassA c;
c = a+b; // :1:+算符里面return语句调用copy构造函数,生成临时变量tmp
// :2:=号调用 copy assainment函数 c=tmp
///////////////////
ClassA a;
ClassA b;
ClassA c = a+b; // :1:+算符里面return语句调用copy构造函数,直接生成c!!!!
example:
ClassA
{
public:
ClassA()
{
// :仅完成资源申请,及初复制
intp = new int;
n = 3;
}
ClassA( const ClassA& rhs)
{
// :1:完成申请资源
intp = new int;
// :2:完成深拷贝
memcpy (intp,rhs.intp);
n = rhs.intp;
}
ClassA& operator=(const ClassA& rhs)
{
// :完成深拷贝
memcpy (intp,rhs.intp);
}
}