Нет, это не безопасно и не действует. GCircle::GetCentre()
возвращает значение по значению, поэтому память, в которой возвращенное значение временно сохраняется, будет недействительной в конце оператора. Присвоение части данных ссылочной переменной действительно сохраняет в памяти только указатель на адрес оригинала. Если эта память недействительна, Centre
может ссылаться на любую память любого типа и будет слепо рассматривать ее как GPoint
.
Чтобы сохранить значение, возвращаемое по значению, вам нужно будет сказать GPoint Centre = circle.GetCentre();
. Если вы действительно хотите получить ссылку на circle
участника c_Centre
, вам следует переписать GetCentre()
следующим образом:
GPoint& GetCentre() const {return c_Centre;}
Кроме того, поскольку вы, вероятно, не хотите, чтобы люди за пределами circle
изменили его центр, вам, вероятно, следует вернуть его как const GPoint&
:
const GPoint& GetCentre() const {return c_Centre;}
Это заставит любого, кто смотрит на новую локальную переменную Centre
, думать, что она const
, без изменения способа, которым circle
просматривает один и тот же фрагмент данных.