1

あなたは以下を持っています:

Person& getPersonByName(string name);

どのような状況で、getPersonByNameからの戻り者がメソッドが終了するとすぐに破棄され、呼び出し元のメソッドが破棄されたデータを処理することを心配する必要がありますか?

ありがとうございました

4

2 に答える 2

8

あなたがすべき。

dangling referenceたとえば、次のとおりです。

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

しかし、これは大丈夫です:

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

referenceaを an の内部変数に返すこともできます。これは、が破棄さobjectれるまで使用しても問題ありません。object

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

private:
    int a;
};
于 2012-07-31T12:51:11.277 に答える
3

Person関数が戻ったときに破棄されない場合。例としては

  • 静的保存期間変数
  • 関数を返すクラスのメンバー変数。
于 2012-07-31T12:51:55.423 に答える