2012-07-31 38 views
1

您有以下:當你通過引用返回對象時,你什麼時候需要擔心對象會被銷燬?

Person& getPersonByName(string name); 

在你需要什麼情況下要擔心來自getPersonByName回人的方法結束,以便調用者方法對數據的破壞工作,將盡快銷燬?

謝謝

+0

如果你返回一個對一個本地非靜態變量的引用,那麼它將導致麻煩,因爲當函數返回時局部變量總是被破壞,留給你一個對一個不存在的對象的引用。 – 2012-07-31 12:53:07

+1

@ user1495181,我修改了一下你的問題。您的原始問題意味着返回參考從不是問題。我已經糾正了這一點。 – 2012-08-01 12:20:12

+0

@Aaron謝謝 – 2012-08-01 12:43:01

回答

8

你應該。

這是dangling reference例如:

Person &getPerson() 
{ 
    Person p; 
    return p; 
} //p is destroyed here 

但是,這是確定的:

Person &getPerson() 
{ 
    static Person p; 
    return p; 
} 

您也可以返回referenceobject內部的一些變量,這是確定使用它,直到object被銷燬:

class Foo 
{ 
public: 
    int & getA() {return a;} 

private: 
    int a; 
}; 
+0

const會阻止返回被破壞,直到調用者結束爲止? – 2012-07-31 12:54:27

+3

「如果你返回const並且它保證變量的生存時間將延長到參考的生命週期」。真?你能提供標準報價嗎? – 2012-07-31 12:56:15

+1

@yurikilochek:here:http://herbsutter.com/2008/01/01/gotw-88-a-candidate-for-the-most-important-const/ – Andrew 2012-07-31 12:57:30

3

如果Person在函數返回時不會被銷燬。實例包括

  • 靜態存儲持續時間的變量
  • 的類的成員變量返回函數是的方法。
+0

這種情況就像在安德魯答案中。 – 2012-07-31 12:53:29

相關問題