构造的优化

C++比C语言开销大的原因之一就是,不经意间构造函数中的反复调用,但我们可以人为的控制这一点。1. 编译器的自动优化;2. 程序员编程规范;3. 右值引用

  1. 编译器的自动优化
    临时对象拷贝构造同类型的对象时,系统会优化成构造
    (1) 构造临时对象+拷贝构造t —》 构造t
    Text t(Text(val)); —》 Text t(val);
    Text t=Text(val); —》 Text t(val);
    (2) 拷贝构造临时对象+拷贝构造t —》 拷贝构造t
    Text t(Text(t0)); —》 Text t(t0);
    Text t=Text(t0); —》 Text t(t0);
  2. 程序员编程规范
    (1)函数调用传递参数的时候,如果传递的时对象,要按对象的引用进行传递
    (2)函数返回对象的时候,应该优先返回一个临时对象
    (3)接收返回类型是对象的函数调用时,优先按照初始化的方式接收
    其中后两点是配合编译器的优化。
  3. 右值引用
    虽然上述已经解决了一部分问题,但是仍有一些情况没有照顾到,对此C++11提供了右值引用。
    (1)提供右值引用void Text::operator=(const Text&& t);
    在操作临时对象时,会调用右值引用,补充了很多情况下,无法让临时对象给初始化对象,从而难以使用系统优化,右值引用就解决了这个问题,unique_ptr的实现就用了右值引用。
    (2)move函数 text2 (move(text1));
    有情况如:text2(text1);且text1以后不再使用,那么如何直接把text1的资源给text2呢?就用move(text1),这可以看成把text1强转成临时对象,然会就会调用右值引用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值