2017-06-21 21 views
1

を関数へのポインタは、私は関数fooを(持っていると仮定)ストア戻り値

A foo() { 
    A a(...); 
    return A; 
} 

今()私は

の戻り値へのポインタを格納
void bar() { 
    A* pA = &foo(); 
} 

bar()の最後に戻り値が範囲外になるか、pAで削除を呼び出す必要がありますか?

+0

***またはpAで削除を呼び出す必要があります*** ***あなたは削除しません。 ***戻り値はbar()の最後にスコープから外れますか?***。あなたはこれをすることはできません。 – drescherjm

答えて

4

これよりもはるかに悪いです! barpAをデリファレンスの

動作は未定義になります。 foo()は、呼び出しサイトのステートメントに制限された匿名の一時的なテンポラリを返すためです。

deletenewを使用した割り当ての結果得られたポインタには、deleteが必要です。

+0

ありがとう、これは非常に明確です。 – Dooggy