Powiel możliwe:
Returning the address of local or temporary variable
Can a local variable’s memory be accessed outside its scope?powracający odniesienia do zmiennej lokalnej
Nawet wiedząc, co się dzieje, jak wynika z poniższych snips pomocne byłoby zrozumieć, jak to się dzieje . Cztery kolejne pytania.
Dane:
int& foo()
{
int i = 1;
return i;
}
i wiedząc, że w dalszej części odniesienie do lokalny nazwie i jest de-odwoływać do temp, który jest przypisany do intval i lokalny i znika na końcu foo()
int intVal = foo();
pierwsze pytanie - w dalszej części prawej stronie wyrażenia jest taki sam jak powyższy sposób jest to przypadek, w którym kompilator widzi lewą stronę i, w zależności od kontekstu, wie, że nie odwołuje się do zwróconego odniesienia, a zamiast tego tworzy z nim nowe odniesienie?
Drugie pytanie - i to samo powoduje, że lokalnie i trzyma się, podczas gdy intRef jest w zasięgu?
int& intRef = foo();
trzecie pytanie - mieszek IntPtr dostaje adres lokalnej i. Tak więc, czy kompilator używa kontekstu przypisania i decyduje się nie odwoływać, aby uzyskać wartość przed wzięciem adresu odniesienia (zamiast powiedzieć, że bierze adres tymczasowej wartości zawierającej odsyłacz)?
Czwarte pytanie - czy lokalne i kij dookoła, gdy intPtr jest w zakresie?
int* intPtr = &foo();
Nie ma sensu wiedzieć, co się tutaj dzieje. FWIW, to * nigdy * nie kręci się wokół, aw pierwszym nie trzyma się wystarczająco długo, aby cokolwiek się wydarzyło. –
Nie ma "a temp"! –
możliwy duplikat: [Zwrot adresu zmiennej lokalnej lub tymczasowej] (http://stackoverflow.com/q/2744264/187543) – cpx