Если вы пишете код в стиле C, вам нужно передать указатель на объект и изменить объект через этот указатель. Таким образом, функция get_ii не беспокоится о том, откуда пришел объект. Вызывающая функция позаботится об этом.
Если вы пишете в стиле C ++, вы должны вернуть значение или вернуть умный указатель или взять ссылку и изменить объект с помощью этой ссылки. Или вы можете использовать стиль C и передать указатель. Некоторые авторы C ++ предпочитают проход указателя, потому что он ясно дает понять, что объект изменяется, а проход ссылки неясен.
Теперь, если объект маленький, как в этом примере, вы всегда должны передавать и возвращать его по значению. Это быстрее и дешевле, чем использование указателя, и делает кодирование более простым.