У меня есть тип enum, определенный в приватной секции моего класса.У меня также есть член этого типа.Когда я пытаюсь инициализировать этот элемент в теле конструктора, у меня возникают проблемы с повреждением памяти во время выполнения.Когда я инициализирую его через список инициализации в конструкторе , тот же , у меня не возникает проблем с повреждением памяти.Я делаю что-то не так?
Я упросту код, и если это ошибка GCC, я уверен, что это комбинация определенных классов, которые я комбинирую / наследую / и т.д., но яОбещаю, что это отражает суть проблемы.Ничто не использует эту переменную-член до ее инициализации, и ничто не использует вновь созданный объект, пока он не будет полностью создан.Инициализация этого члена - действительно первое, что я делаю в теле, и когда происходит повреждение памяти, valgrind говорит, что это на той линии, где я инициализирую переменную.Valgrind говорит, что это недопустимая запись размером 4.
Соответствующий код заголовка:
private:
enum StateOption{original = 0, blindside};
StateOption currentState;
соответствующий код .cpp (вызывает повреждение памяти и сбой):
MyClass::MyClass(AClass* classPtr) :
BaseClass(std::string("some_setting"),classPtr)
{
currentState = original;
...
}
соответствующий код .cpp (не приводит к повреждению памяти и сбоям):
MyClass::MyClass(AClass* classPtr) :
BaseClass(std::string("some_setting"),classPtr),
currentState(original)
{
...
}
edit: см. Мой «ответ» о причинах этого.После прочтения, кто-нибудь может объяснить мне, почему это имело значение?Я ничего не изменил в заголовке, и, очевидно, объектный файл перестраивался из-за того, что мои операторы печати появлялись, когда я их вставлял, и из-за отсутствия видимой ошибки при одной сборке, но не при другой?Для хорошего объяснения я отмечу это как ответ на этот вопрос.