C++细节五:避免产生临时(隐式)对象

本文通过实例详细解析了C++中临时对象的概念及其产生过程,强调了如何避免不必要的临时对象生成以提高程序效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    产生一个对象,如果这个对象很大并且这个对象是在一个循环里面产生的,是特别耗资源的,因为编译器要找到一块合适的内存,如果没有合适的还要整理磁盘碎片并合并为一块合适的对象存储区。因此,在编程中一定要小心的产生临时对象。

    临时对象在C++语言中的特征是未出现在源代码中,从堆栈中产生的未命名对象。这里需要特别注意的是,临时对象并不出现在源代码中。即开发人员并没有声明要使用它们,没有为其声明变量。它们由编译器根据情况产生,而且开发人员往往都不会意识到它们的产生。

    当然,编译器产生临时变量往往对我们是很方便的,这和临时对象是不一样的。

    首先看下面这个例子:

  1. #include <stdio.h>
  2. class A
  3. {
  4. public
  5.     A()
  6.     {
  7.         printf("A created./n");
  8.     }
  9.     A(A& a)
  10.     {
  11.         printf("A created with copy/n");
  12.     }
  13.     ~A()
  14.     {
  15.         printf("A destroyed./n");
  16.     }
  17. };
  18. A foo(A a)//产生第二个对象
  19. {
  20.     A b;//产生第三个对象
  21.     return b;
  22. }
  23. int main()
  24. {
  25.     A a;//产生第一个对象
  26.     a=foo(a);//产生第四个对象
  27.     return 0;
  28. }

输出结果如图:

 

    以上代码,表面上我们只在22行和28行产生了2个对象,但是实际上产生了4个对象,在代码中有标示。我们完全可以将20行改为 A& foo(A &a), 参数和返回值都传引用,可以避免产生临时对象。

 

    除了因为返回对象或者传入对象产生隐藏对象之外,还有很多原因会产生临时对象,特别是使用重载运算符的时候,返回一个对象。未完待续。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值