Нужно ли инициализировать переменные в заголовочном файле .h
На данный момент, я считаю вопрос того, нужно ли инициализировать переменные в заголовочном файле число филосовским вопросом (делом вкуса). Но есть ли реальные советы по тому, нужно ли это делать или достаточно того, что они будут инициализированны в самом конструкторе:
class Example
{
public:
Example(void) noexcept;
Example &operator=(const Example &) noexcept = default;
Example &operator=(Example &&) noexcept = default;
Example(const Example &) noexcept = default;
Example(Example &&) noexcept = default;
~Example(void) noexcept = default;
...
private:
int num;
};
Example::Example(void) noexcept : num(0)
{
}
Или все же лучше так:
class Example
{
public:
Example(void) noexcept;
Example &operator=(const Example &) noexcept = default;
Example &operator=(Example &&) noexcept = default;
Example(const Example &) noexcept = default;
Example(Example &&) noexcept = default;
~Example(void) noexcept = default;
...
private:
int num = 0;
};
Example::Example(void) noexcept : num(0)
{
}
Слышал где-то (а может это шизофрения), что при создании класса динамически, возможно неопределенное состояние этой переменной, даже если она инициализирована в конструкторе.
Ответы (1 шт):
Есть такая штука - как C++ Core Guidelines, где собраны лучшие рекомендации от создателя с++ и других хороших разработчиков языка.
Там есть такой пункт - C.48: Prefer in-class initializers to member initializers in constructors for constant initializers - предпочитайте инициализацию внутри класса нежели инициализацию в конструкторах. Причина банальная - если есть несколько конструкторов, то легко забыть инициализировать одну с переменных-членов класса.