您有以下:當你通過引用返回對象時,你什麼時候需要擔心對象會被銷燬?
Person& getPersonByName(string name);
在你需要什麼情況下要擔心來自getPersonByName回人的方法結束,以便調用者方法對數據的破壞工作,將盡快銷燬?
謝謝
您有以下:當你通過引用返回對象時,你什麼時候需要擔心對象會被銷燬?
Person& getPersonByName(string name);
在你需要什麼情況下要擔心來自getPersonByName回人的方法結束,以便調用者方法對數據的破壞工作,將盡快銷燬?
謝謝
你應該。
這是dangling reference
例如:
Person &getPerson()
{
Person p;
return p;
} //p is destroyed here
但是,這是確定的:
Person &getPerson()
{
static Person p;
return p;
}
您也可以返回reference
到object
內部的一些變量,這是確定使用它,直到object
被銷燬:
class Foo
{
public:
int & getA() {return a;}
private:
int a;
};
const會阻止返回被破壞,直到調用者結束爲止? – 2012-07-31 12:54:27
「如果你返回const並且它保證變量的生存時間將延長到參考的生命週期」。真?你能提供標準報價嗎? – 2012-07-31 12:56:15
@yurikilochek:here:http://herbsutter.com/2008/01/01/gotw-88-a-candidate-for-the-most-important-const/ – Andrew 2012-07-31 12:57:30
如果Person
在函數返回時不會被銷燬。實例包括
這種情況就像在安德魯答案中。 – 2012-07-31 12:53:29
如果你返回一個對一個本地非靜態變量的引用,那麼它將導致麻煩,因爲當函數返回時局部變量總是被破壞,留給你一個對一個不存在的對象的引用。 – 2012-07-31 12:53:07
@ user1495181,我修改了一下你的問題。您的原始問題意味着返回參考從不是問題。我已經糾正了這一點。 – 2012-08-01 12:20:12
@Aaron謝謝 – 2012-08-01 12:43:01