In Body * &b
b - псевдоним / ссылка на b
в main
- поэтому, когда вы назначаете его, вы изменяете b
в main
. В Body* b
b это локальная копия b
в main
, вы изменяете эту локальную копию, а не b
в main
.
Вероятно, ваша ошибка во время выполнения связана с использованием неинициализированного b
в main
.
РЕДАКТИРОВАТЬ: Фактическая ошибка, которую вы получаете, представляет собой дополнительный механизм проверки типичных проблем, встроенный в ваш код вашим компилятором. Он обнаруживает, что вы передаете что-то неинициализированное по значению, что не имеет смысла, и, следовательно, генерирует эту ошибку.
Если вы отключите это поведение, приложение будет работать правильно, пока вы не попытаетесь разыменовать неинициализированный b
в main