C++ 巩固进阶之一
大纲
C++ 对象深入探索
对象的构造与析构
案例代码一
1 |
|
程序运行输出的结果如下:
1 | --------- 1 --------- |
案例代码二
提示
在 C++ 中,最先析构的对象,往往都是最后析构的,即符合 "先构造后析构" 的规则(类似栈的 "先进后出"),这规则同样适用于类成员属性的构造和析构。
1 |
|
程序运行输出的结果如下:
1 | Test(10, 10) |
C++ 函数调用深入探索
案例代码一
1 |
|
程序运行输出的结果如下(详细分析图解请看这里)
1 | Test(int a) // main() 函数中构造 t1 对象 |
案例代码二
上述 案例一 的代码执行效率比较低,主要原因有以下几个:
- 第一个原因:
getObject()
函数的参数是按值传递,而不是按引用传递,这会多调用一次拷贝构造函数。 - 第二个原因:在
getObject()
函数中先构造了一个tmp
对象,然后再作为函数的返回值,这会多调用一次构造函数。 - 第三个原因:在
main()
函数中,将临时对象赋值给t2
对象,这会多调用一次赋值运算符重载函数。
- 第一个原因:
C++ 对象的优化原则
- (1) 函数参数传递的过程中,对象应该优先按引用传递,而不是按值传递。
- (2) 函数调用结果返回对象的时候,应该优先返回一个临时对象,而不要返回一个定义过的对象。
- (3) 当函数返回值是对象的时候,优先按初始化的方式来接收返回值,而不是按赋值的方式来接收返回值。
- 换言之,尽量使用临时对象去拷贝构造新对象,因为这样临时对象就不会产生,也就是直接构造新对象就行,这是任意 C++ 编译器都会做的优化。
1 |
|
程序运行输出的结果如下:
1 | Test(int a) // main() 函数中构造 t1 对象 |