Если вы используете ссылку, тогда переменная должна быть инициализирована (как не NULL) в конструкторе.Это безопаснее, поскольку вы уверены, что ссылка действительно указывает на существующий объект.
About
Mutator mutator(State());
Это не имеет особого смысла, если только объект State не используется только как входнойдля конструктора Mutator;однако если он изменяет вновь созданную переменную State, когда конструктор возвращает значение и создается мутатор, экземпляр State () удаляется.
Также (см. примечание NathanOliver ниже), это не является допустимым кодом C ++ и неportable.
Обновление
Тестовое приложение:
class State {
public: State() {}
};
class Mutator {
private: State& _state;
public: Mutator(State& state) : _state(state) { }
};
void setup() {
Mutator mutator(State());
}
int main() {
return 0;
}
Код выше компилятора и корректные ссылки на компиляторе Arduino (1.8.9):
Sketch uses 260 bytes (0%) of program storage space. Maximum is 253952 bytes.
Global variables use 0 bytes (0%) of dynamic memory, leaving 8192 bytes for local variables. Maximum is 8192 bytes.