http://blog.csdn.net/lujiandong1/article/details/42195595
沒有名字的對象就是臨時對象,它存在於完整的表達式的生存其間。也就是說,當表達式計算結束後就會被釋放。一個例外是,當臨時對象被引用時,它的生存期將延長到與這個引用的生存期一樣長。
局部對象就是可見區域在一個函數範圍的對象。
局部對象有兩種,靜態局部對象的生存期起於所在函數第一次被調用,結束於main()函數退出之後。自動局部對象生存期起於所在函數每一次被調用,結束於函數返回。
A fun()
{
return A();//創建一個A的臨時對象並返回。這個臨時對象將被拷貝給調用者的臨時對象,然
後釋放(在進行了RVO時不創建臨時對象,而是直接構造調用者的臨時對象)。
}
A a;
a = fun();//調用fun,產生一個臨時對象;用這個臨時對象爲參數調用a的拷貝賦值操作符,然釋放臨時對象。
const A b& = fun();//調用fun,產生一個臨時對象,這個對象並不會馬上被釋放,而是會在離開b的作用域後釋放,因爲它被b引用了。
臨時對象
臨時對象是看不見的,不出現在源代碼中。通常兩種條件下會產生:
1爲了使函數成功調用而進行的隱式類型轉換
2 函數返回對象時
在任何時候只要見到常量引用(reference to const)參數,就存在建立臨時對象而綁定在參數上的可能性。
在任何時候只要見到函數返回對象,就會有一個臨時對象被建立
局部對象
靜態局部對象:在首次進入到定義該靜態對象的函數時,進行構造,存放在全局數據區,其生命期與程序的運行生命期相同。
局部對象:在函數開始執行時,按出現的順序統一定義,存放在棧中,其生命期同函數的生命期。
class A { -----}
A get () { A a;
return a;
};
對象a分配在棧中,函數返回時已經析構,是不可返回的。因此需要創建“臨時對象”。
2.在函數的調用者接收了函數返回的“臨時對象”時,如果是作爲引用接收的,此時該“臨時對象”即轉變爲“永久對象”,不再析構。如果是作爲非引用接收,則c++將再創建一個copy對象copy這一“臨時對象”,然後將該“臨時對象”析構。