﻿# V1050\. Uninitialized class member is used when initializing the base class\.

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

Рассмотрим пример:

```cpp
struct C : public Base
{
  C(int i) : m_i(i), Base(m_i) {};
  ....
  int m_i;
};
```

Согласно стандарту, сперва инициализируются базовые классы в порядке, указанном в объявлении\. На момент вызова конструктора 'Base' переменная 'm\_i' ещё не инициализирована, поэтому исправить код можно, например, так:

```cpp
struct C : public Base
{
  C(int i) : m_i(i), Base(i) {};
  ....
  int m_i;
};
```

Также анализатор может обнаружить использование неинициализированных переменных, находящихся не только внутри класса, но и внутри базовых классов:

```cpp
struct Base1
{
  Base1(int i) : m_base1(i) { };
  virtual ~Base1() = default;
  ....
  int m_base1;
};

struct Base2
{
  Base2(int i) : m_base2(i) { };
  virtual ~Base2() = default;
  ....
  int m_base2;
};
struct C : public Base1, public Base2
{
  C(int i) : m_i(i), Base1(m_base2), Base2(i) {};
  ....
  int m_i;
};
```

Если нужно инициализировать один из базовых классов полем другого, то нужно убедиться в том, что они инициализируются в нужном порядке:

```cpp
struct C : public Base2, public Base1
{
  C(int i) : m_i(i), Base1(m_base2), Base2(i) {};
  ....
  int m_i;
};
```

Похожие проблемы способна искать диагностика [V670](https://pvs-studio.ru/ru/docs/warnings/v670/)\. Однако она занимается поиском проблем, связанных с порядком инициализации полей одного класса, когда порядок инициализации переменных зависит от порядка их объявления в классе\.