讨论构造拷贝构造的N种调用情况问题
来源:互联网 发布:非平衡面板数据 编辑:程序博客网 时间:2024/06/08 10:14
1.先总结C++对传参和传返回值时构造的优化处理。
1)在c++中,传参和传返回值时,如果是引用类型,则不用调用拷贝构造函数,直接返回别名。 当语句为一个表达式时,编译器会选择优化,将构造函数与拷贝构造合并。 在C++中,调用几次构造函数和拷贝构造函数,就会相应的调用几次析构函数。
2)系统在什么情况下会进行优化呢?
1>当拷贝构造存在连续的赋值情况的时候,
2>当多个临时对象连续赋值的时候
简单点来说就是,在一次拷贝构造结束后,并没有直接返回给要创建的对象而是又再次进行了拷贝构造。或者是,建立一个临时对象,来进行拷贝构造,然后又返回了一个临时对象,再用这个返回的临时对象继续拷贝构造。这时候,系统就会自动优化。
例如:
2.再完成下面的题目。
Test1中调用了2_次AA的拷贝构造函数,_1次AA的赋值运算符函数的重载。
Test2中调用了_2次AA的拷贝构造函数,_0次AA的赋值运算符函数的重载。
Test3中调用了3_次AA的拷贝构造函数,_0次AA的赋值运算符函数的重载。
class AA {}; AA f (AA a) { return a ; } void Test1 () { AA a1 ; a1 = f(a1); } //Test1中,定义AA时调用了一次构造函数,a1传给f(),传参时调用了1次拷贝构造;返回临时变量a时调用了1次拷贝构造,接着调用了1次赋值运算符的重载。void Test2 () { AA a1 ; AA a2 = f(a1); } //Test2中,生成对象a1时调用了一次构造函数,a1传参给f()时,调用了1次拷贝构造,返回临时变量a时调用了1次拷贝构造,接着将临时变量a直接赋值给a2.void Test3 () { AA a1 ; AA a2 = f(f(a1)); } //Test3中,生成对象a1时调用了一次构造函数,a1传参给f()时,调用了1次拷贝构造,再返回临时变量a时调用了1次拷贝构造,将返回的临时变量作为再次调用f()时的参数,再返回临时变量a时调用了1次拷贝构造,接着用临时变量a初始化a2.
阅读全文
0 0
- 讨论构造拷贝构造的N种调用情况问题
- 讨论构造、拷贝构造的N种调用情况
- 讨论构造拷贝构造函数的N种调用情况
- 【c++】构造拷贝构造的N种调用情况问题
- 讨论构造拷贝构造的N中调用情况的问题
- 讨论构造拷贝构造的N中调用情况的问题
- 讨论构造拷贝构造的N中调用情况的问题
- 讨论构造函数的N种调用情况的问题
- 构造拷贝构造的N中调用情况的问题
- C++传参构造的优化和讨论构造拷贝构造N中调用情况
- 构造拷贝构造的N种调用情况
- 构造,拷贝构造的N种调用情况
- 构造和拷贝构造的N种调用情况的问题
- C++构造拷贝中拷贝的N种调用情况
- 构造、拷贝构造的N种情况
- 构造函数拷贝赋值函数的N种调用情况
- 【C++】构造拷贝构造的 N 中调用情况
- 构造&拷贝构造的N中调用情况
- 关于Android启动页全屏的解决方案
- Error mounting /dev/sda7 at 解决方法
- 【C++11新特性】 C++11智能指针之weak_ptr
- python 的日志logging模块学习
- 使用HDP搭建并管理集群
- 讨论构造拷贝构造的N种调用情况问题
- C利用宏实现函数重载
- 元数据管理
- Java 基础语法
- EasyUi-treegrid 批量展开收起、默认展开收起
- 相关注解(spring+springmvc)
- Eclipse如何修改Web项目的名称
- css3的新属性遮罩蒙版mask
- android.view.WindowLeaked的解决办法 has leaked window android.widget.PopupWindow$PopupDecorView