Я столкнулся с некоторым странным поведением с 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?
Спасибо за вашу помощь