﻿# V1041\. Class member is initialized with dangling reference\.

Диагностика выявляет случаи инициализации членов класса "плохим" указателем или ссылкой\.

Пример:

```cpp
class Foo {
  int *x;
  int &y;
  Foo(int a, int b);
};

Foo::Foo(int a, int b) :
  x(&a),  // <=
  y(b)    // <=
{};
```

Переменная 'x' является указателем, при инициализации ей присваивается адрес переменной 'a'\. Переменная 'a' \- аргумент и является локальной для конструктора, поэтому область ее видимости короче, чем у 'x'\. После выхода из конструктора 'x' будет иметь неверный указатель\.

То же самое верно и для ссылки 'y'\.

Правильный вариант будет выглядеть таким образом:

```cpp
class Foo {
  int *x;
  int &y;
  Foo(int *a, int &b) :
    x(a),
    y(b)
  {}
};

Foo::Foo(int *a, int &b) :
  x(a),
  y(b),
  {}
};
```

Теперь конструктору передаются адрес и ссылка напрямую, их область видимости все так же ограничена областью видимости конструктора, но область видимости их значений \- нет\.