C++ コード:
person* NewPerson(void)
{
person p;
/* ... */
return &p; //return pointer to person.
}
C# コード:
person NewPerson()
{
return new person(); //return reference to person.
}
この権利を理解していれば、C++ の例は適切ではありません。これは、p
が範囲外になり、関数がワイルド ポインター (ダングリング ポインター) を返すためです。
C# の例は問題ありません。参照がある限り、匿名の新しい人物はスコープ内に留まるからです。(呼び出し関数は 1 つ取得します。)
私はこれを正しく理解しましたか?