std :: vector по умолчанию не инициализируется ctor - PullRequest
0 голосов
/ 07 марта 2019

Я столкнулся с некоторым странным поведением с GCC-4.8 при инициализации std :: vector в ctor по умолчанию класса.Мой код следующий:

class TestLogger final: public Logger
{
public:   
  void LogWarning(const std::string& msg,) const override{
    this->mWarningMessages.emplace_back(msg);
  }

  bool ContainsWarnings() const{
    return !this->mWarningMessages.empty();
  }

private:
  mutable std::vector<std::string> mWarningMessages;  // needs to be mutable because it's changed by const method
};

Что произойдет, если я использую какой-то объект моего класса TestLogger?Этот элемент mWarningMessages не инициализирован.

См. Следующий код:

int main(int argc, char *arcv[])
{
  TestLogger logger;
  bool shouldBeFalse = logger.ContainsWarnings() // --> false expected, but returns true;
}

Если я сам реализую конструктор по умолчанию класса TestLogger с mWarningMessages в списке инициализаторов, все будет отлично.

Кто-нибудь знает, почему мой код без ctor по умолчанию не работает?Я ожидал, что mWarningMessage будет правильно инициализирован автоматически сгенерированным ctor по умолчанию моего класса TestLogger.Может ли это быть ошибкой в ​​GCC-4.8?

Спасибо за вашу помощь

...