2010-11-16 57 views
4
Class A 
    { 
    A(int& foo) : m_foo(foo) {} 

    int& m_foo; 
    }; 


int main(void) 
{ 
A* bar = 0; 
{ 
    int var = 5; 
    bar = new A(var); 
} 
std::cout << "Is m_foo still valid?:" << bar.m_foo << std::endl; 
} 

「m_foo」是一個引用,「var」是一個給構造函數的局部變量。 「var」在打印值之前超出了範圍,因此它使m_foo也無效?C++:類成員引用有效性?

如果m_foo是一個指針,那麼它將是無效的,但它是否與引用一樣工作?

回答

6

m_fooint var超出範圍時無效。它所指的東西已經消失。

2

是的。行爲是未定義的。

3

是的,如果引用的對象被取消分配,則引用成員變爲無效。與指針相同。如果你打算繼續參考,請確保生命週期的巢穴。或者使用類似boost::weak_ptr的東西。