std :: vector默认未初始化ctor

时间:2019-03-07 10:09:41

标签: c++ gcc4.8

在类的默认ctor中初始化std :: vector时,我遇到了GCC-4.8的某些奇怪行为。我的代码如下:

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被类TestLogger的自动生成的默认ctor正确初始化。这可能是GCC-4.8中的错误吗?

感谢您的帮助

0 个答案:

没有答案