Когда вы добавляете или удаляете членов класса, вы изменяете структуру памяти объекта.Если вы не перекомпилируете, вы нарушаете правило ODR, и ошибки сегментации являются только следствием этого.
Что касается того, почему это происходит, старый код может получить память для старого размера, а затем передатьэтот объект (без нового члена) к новому коду, который получит доступ после конца выделенной памяти для доступа к новой переменной.Обратите внимание, что спецификатор доступа не влияет вообще, если он является закрытым, то, вероятно, это будут функции-члены класса, которые обращаются к полям.
Если вы добавили поле не в конец, а вПосередине объекта тот же эффект будет виден при доступе к тем полям, которые размечены компилятором в старших адресах памяти.
Тот факт, что вам нужно было использовать , перестраивает все Эта функция указывает на то, что зависимости вашего проекта настроены неправильно, и вы должны исправить это как можно скорее.Наличие правильных зависимостей заставит компилятор перестраиваться при необходимости и будет означать меньше бесполезных часов отладки.