2016-10-01 24 views

回答

1

這是一個合理的問題,尤其是在一些常用語言例如Python,允許這個。

但是,如果允許對本地人的引用並假設此代碼可以編譯,請考慮這種情況。

struct MyClass { 
    virtual fetchValue() = 0; 
}; 

MyClass* somefunction(){ 
    int localVariable = 123; 
    struct HypotheticalClass : public MyClass { 
     virtual int fetchValue(){ return localVariable; } 
    }; 
    return new HypotheticalClass() 
} 

現在,當在somefunction()的末尾返回這個MyClass的衍生物,它將保持參照現在-無效棧位置。繁榮。

當然,還有很多其他的方式來不恰當地引用無效的堆棧位置,例如,將對該局部變量的引用傳遞給您的類以獲取訪問權限。對於可以訪問本地引用或執行副本的lambdas,存在同樣的問題。

至於權威的回答,爲什麼,我瀏覽了第4版Stroustrup,並沒有看到任何有用的報告。

感謝您的有趣問題。