对构造函数、拷贝构造函数和赋值操作符调用的简单回顾
本文只是测试构造函数、拷贝构造函数和赋值操作符的调用问题,不涉及这些函数内的具体实现,所以多包涵
还有如果觉得有不足之处还望指出,谢谢…………
?
?
??
?
Objected is constructed.(参数)
Objected is constructed.(无参数)
Object is copied. ? ? ? ? ? //每次传参都会构建临时对象
getO
Object is copied.
Object is destructed.
Object is operator =.
Object is destructed.
?
Object o2 = getObject(o):
Object is copied.
getO
Object is copied.
Object is destructed.
?
o1 = getObject(o):
Object is copied.
getO
Object is copied.
Object is destructed.
Object is operator =.
Object is destructed.
?
?
getObject1:
Objected is constructed.(无参数)
getO1
Object is copied.
Object is operator =.
Object is destructed.
?
Object o22 = getObject(o):
getO1
Object is copied.
?
o11 = getObject(o):
Object is copied.
getO
Object is copied.
Object is destructed.
Object is operator =.
Object is destructed.
?
?
getObject2:
Objected is constructed.(无参数)
getO2
Object is operator =.
?
Object o222 = getObject(o):
getO2
Object is copied.
?
o111 = getObject(o):
Object is copied.
getO
Object is copied.
Object is destructed.
Object is operator =.
Object is destructed.
end
拷贝构造函数和赋值操作符:同样是利用现有对象的值,生成/更新另一个对象的值。区别在于:拷贝构造函数是去完成对未初始化的存储区的初始化,而赋值操作符则是处理一个已经存在的对象。对一个对象赋值,当它一次出现时,它将调用拷贝构造函数,以后每次出现,都调用赋值操作符。
定义对象a,并用另一个对象b对a进行初始化时,若没有拷贝构造函数时,那么编译器会自动生成一个T b(1);//假设对象b已经初始化T a(b);//初始化阶段,调用拷贝构造函数T c = b;//虽然使用了“=”,但是初始化阶段,仍调用拷贝构造函数c = a; //因为对象c已经定义,所以此处调用赋值操作符重载函数。如果没有编译器会自动生成一个。??