C ++ должен очищать состояние после выхода из своей области, поэтому данные являются копией состояния, верно?
В первом примере оператор
data = state
предположительно копирует значение state
в локальную переменную data
, которая является ссылкой на тот же объект, который обозначен data
в области действия вызывающего абонента (потому что это выбранные имена - они не 't имеет для соответствия). Я говорю «предположительно», потому что в принципе переопределенный оператор присваивания может делать что-то еще полностью. В любой библиотеке, которую вы действительно хотите использовать, вы можете предположить, что оператор присваивания делает что-то разумное, но может быть важно знать детали, поэтому вам следует проверить.
Время жизни локальных переменных data
и state
заканчивается при выходе из метода. В этот момент они будут очищены, и после этого не может быть предпринято никаких попыток получить к ним доступ. Ничто из этого не влияет на объект data
вызывающего абонента.
И чем он отличается от того, что вы видите на многих примерах:
CDROM_TOC_SESSION_DATA data;
GetSessionData(&data);
Не так много , Здесь вызывающая сторона передает указатель вместо ссылки. GetSessionData
должен быть объявлен соответствующим образом для этого, и его реализация должна явно разыменовать указатель для доступа к объекту data
вызывающего, но общая идея для большинства намерений и целей одна и та же. Указатель и ссылка являются аналогичными механизмами для косвенного доступа.
Какой из них имеет больше смысла в использовании или является правильным способом?
Это зависит. Передача ссылки, как правило, немного более идиоматична c в C ++, и она имеет то преимущество, что метод не должен беспокоиться о получении нулевого или недействительного указателя. С другой стороны, передача указателя необходима, если функция имеет связь C или если вам необходимо учесть возможность получения нулевого указателя.