簡體   English   中英

C ++:引用“超出范圍”對象

[英]C++: Reference to “out of scope” object

有一件事我從未理解過參考文獻,我希望有人可以幫助我。 據我所知,引用不能為空。 但是如果你有一個函數foo()返回對堆棧對象的引用會發生什么:

Object & foo(){
    Object o;
    return o;
}

Object & ref = foo();

理論引用將引用一個不存在的對象,因為一旦函數返回,o就會超出范圍。 這里發生了什么事?

這會導致未定義的行為。 不要這樣做。

實現方面,實際上,引用將指向堆棧,其中用於調用foo的堆棧幀曾經是。 在許多情況下,這種記憶仍然有意義,因此錯誤通常不會立即顯現出來。 因此,你應該注意不要像這樣做一個懸垂的參考。

在使用返回的引用之前沒有任何內容 - 然后您將在堆棧上讀/寫

這個上下文中的行為是未定義的 - 這在c ++中並不是特別奇怪。 這與將指針設置為超出范圍的局部變量的情況基本相同。 C ++要求您控制句柄引用和引用對象的生命周期。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM