2012-07-31 60 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

相关问题