分享

C++临时对象

 sky_feiyang 2014-06-30


#include<iostream>
using namespace std;

class A
{
public:
 
 A(){
  cout<<"construct"<<endl;
 }
 
  ~A()
 {
  cout<<"destruct"<<endl;
 }
    A(A& a)
 {
  cout<<"Copy"<<endl;
 }

  A& operator=(const A& a)
  {
   cout<<"==="<<endl;
   return *this;
  }
};
A fun(A a) //复制构造
{
 return a;//临时对象,复制构造
}

void main()
{
   A a;
   a=fun(a);//赋值操作符

}

 

输出:
          construct
          Copy
          Copy
          destruct
          ===
          destruct
          destruct
 

程序员间交谈时,经常把仅仅需要一小段时间的变量称为临时变量。例如在下面这段swap(交换)例程里:

template<class T>

void swap(T& object1, T& object2)

{

T temp = object1;

object1 = object2;

object2 = temp;

}

   

    通常把temp叫做临时变量。不过就C++而言,temp根本不是临时变量,它只是一个函数的局部对象。

    在C++中真正的临时对象是看不见的,它们不出现在我们的源代码中。建立一个没有命名的非堆(non-heap)对象会产生临时对象。这种未命名的对象通常在两种条件下产生:为了使函数成功调用而进行隐式类型转换和函数返回对象时。理解如何和为什么建立这些临时对象是很重要的,因为构造和释放它们的开销对于程序的性能来说有着不可忽视的影响。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多