读书人

对构造函数、拷贝构造函数跟赋值操作符

发布时间: 2012-12-25 16:18:28 作者: rapoo

对构造函数、拷贝构造函数和赋值操作符调用的简单回顾
本文只是测试构造函数、拷贝构造函数和赋值操作符的调用问题,不涉及这些函数内的具体实现,所以多包涵

还有如果觉得有不足之处还望指出,谢谢…………

?

?

?

?

?

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已经定义,所以此处调用赋值操作符重载函数。如果没有编译器会自动生成一个。?

?

读书人网 >编程

热点推荐