首页 > 解决方案 > std::vector 默认未初始化 ctor

问题描述

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

谢谢你的帮助

标签: c++gcc4.8

解决方案


推荐阅读