1. 程式人生 > >對臨時物件的一點思考

對臨時物件的一點思考

在一個塊作用域或者函式體內的臨時變數(非指標),例如
C1 f()
{
  C1 c;
  return c;
}
此時返回值是個臨時變數,不是c,而是C1(c)構建的一個臨時變數
C1& f()
{
  C1 c;
  return c;
}
此時返回值是一個refernce故非臨時變數,是對變數c的一個引用,而由於c的作用域已經結果即c已經消亡,故該reference是未定的一個物件,故此寫法不合適
在完面呼叫時
C1 c=f(),則產生兩個C1物件,第一個為函式返回值生成的臨時物件,第二為C1(臨時物件生成)建立的c
C1& c=f(),則產生一個C1物件,即一個臨時物件

//////////////////////////////////////////////////////////
在vc的stl中vector,要產生一個臨時物件,在vecotr.push_back內部
例如vecotr.push_back(T(argument)),T(argument)生成一個物件,在vecotr.push_back內部T _tmpr=val語句產生一個物件,最後在vecotr.push_back的new操作附生成一個物件,好像中間那個物件有點多餘
,在函式void _Insert_n(iterator _Where, size_type _Count, const _Ty& _Val)中,有一語句_Ty _Tmp=_val

在linux的stl中vecotr,用的是g++,對於上面的例子只產生兩個物件,第一個為T(argument),第二個new產生