Инициализация карты и установить переменные-члены класса, чтобы очистить в C ++? - PullRequest
7 голосов
/ 03 декабря 2010

У меня есть класс C ++ с двумя переменными-членами

std::map<int, Node*> a;

и

std::set<Node*> b;

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

Ответы [ 4 ]

14 голосов
/ 03 декабря 2010

Как это:

class A
{
  public :

  A() : s(),
        m()
  {
  }


  std::set< int > s;
  std::map< int, double > m;
};
2 голосов
/ 03 декабря 2010

Так как std::set и std::map имеют объявленные пользователем конструкторы по умолчанию, они будут инициализированы неявно, как бы вы ни создавали свой класс. Вам не нужно делать ничего особенного, чтобы соответствовать руководству по стилю.

2 голосов
/ 03 декабря 2010

Как это SomeClass::SomeClass() : a(), b() {}?

0 голосов
/ 04 января 2012

Эта проверка выполняется компилятором g ++, когда применяется параметр предупреждения -Weffc ++. См. Пункт 4 («Убедитесь, что объекты инициализированы перед использованием»). в Scott Meyers, Effective C ++, книга для получения дополнительной информации, почему может быть разумно инициализировать всех членов, используя список инициализации членов. В основном он предлагает делать это последовательно и предпочитать это по сравнению с заданиями внутри конструктор тел.

...