当您通过引用返回对象时,您何时需要担心该对象将被销毁?

时间:2012-07-31 12:49:02

标签: c++

您有以下内容:

Person& getPersonByName(string name);

在什么情况下你需要担心一旦方法结束就会破坏getPersonByName中的返回人员,这样调用者方法就会对被破坏的数据起作用?

谢谢

2 个答案:

答案 0 :(得分:8)

你应该。

这是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;
};

答案 1 :(得分:3)

如果函数返回时Person没有被销毁。例子包括

  • 静态存储持续时间变量
  • 返回函数的类的成员变量是。
  • 的方法