Подтвердить что ты не робот

Правильный способ инициализации переменной-члена вектора

// Method One
class ClassName
{
public:
    ClassName() : m_vecInts() {}

private:
    std::vector<int> m_vecInts;
}

// Method Two
class ClassName
{
public:
    ClassName() {} // do nothing

private:
    std::vector<int> m_vecInts;
}

Вопроs > Каков правильный способ инициализации векторной переменной-члена класса? Нужно ли инициализировать его вообще?

4b9b3361

Ответ 1

См. http://en.cppreference.com/w/cpp/language/default_initialization

Инициализация по умолчанию выполняется в трех ситуациях:

  • когда переменная с автоматической продолжительностью хранения объявляется без инициализатора
  • когда объект с динамической продолжительностью хранения создается новым выражением без инициализатора
  • когда базовый класс или элемент нестатических данных не упоминается в списке инициализаторов конструктора и этот конструктор называется.

Эффекты инициализации по умолчанию:

  • Если T является типом класса , конструктор по умолчанию вызывается для предоставления начального значения для нового объекта.
  • Если T - тип массива, каждый элемент массива инициализируется по умолчанию.
  • В противном случае ничего не делается.

Так как std::vector - это тип класса, вызываемый его конструктором по умолчанию. Поэтому инициализация вручную не требуется.

Ответ 2

Это зависит. Если вам нужен вектор размера 0, вам не нужно ничего делать. Если вы хотите, скажем, заполнить вектор N размером 42 с, используйте списки инициализаторов конструктора:

ClassName() : m_vecInts(N, 42) {}

Ответ 3

Вам не нужно инициализировать его экскрементно, он будет создан при создании экземпляра вашего класса.