C ++: допустимость ссылки на член класса? - PullRequest
4 голосов
/ 16 ноября 2010
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 также недействительным?

Если m_foo является указателем, то он будет недействительным, но работает ли он так же со ссылками?

Ответы [ 3 ]

6 голосов
/ 16 ноября 2010

m_foo недопустимо, когда int var выпадает из области видимости. вещь , к которой она относится, исчезла.

3 голосов
/ 16 ноября 2010

Да, ссылочный элемент становится недействительным, если указанный объект отменяется. Так же, как с указателями. Если вы намереваетесь хранить ссылки, убедитесь, что гнездо времени жизни. Или используйте что-то вроде boost::weak_ptr.

2 голосов
/ 16 ноября 2010

Да. Поведение не определено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...