Devuelve una referencia al miembro privado.
Hay muchos casos en que esto es deseable, pero debe tenerse cuidado.
IMO por lo general no es una buena idea devolver una copia de un objeto interno que no sea de tipo integral, por razones de rendimiento general. Sí, lo sé, la optimización prematura no es buena, pero esto no es realmente una optimización, es solo una buena práctica de desempeño que le permite al que llama determinar las implicaciones del rendimiento; si quiere una copia, simplemente no puede declarar la variable que la está asignando como referencia.
Hay 2 reglas generales que usan aquí:
1) Si no desea que la persona que llama para poder modificar el objeto privado directamente, declarar el valor de retorno como una referencia constante:
inline const string& GetLabel() const{ return m_Label; }
2) Una persona que llama nunca debe almacenar la referencia devuelta por un método de clase, solo debe usarse localmente donde se garantiza que el objeto primario está dentro del alcance.
Si por alguna razón necesita que las personas que llaman puedan almacenar una referencia a sus objetos internos, use punteros inteligentes en su lugar.
De hecho, es probable que desee tanto las versiones const como las no const. – ildjarn
@ildjam Eso es parcialmente cierto. Por lo general, solo deseará proporcionar la versión const, a menos que tenga una razón para querer permitir que las personas que llaman modifiquen el objeto directamente. Si proporciona la versión no const, entonces también debe proporcionar la versión const, para que pueda obtener acceso de solo lectura donde tenga una referencia constante al objeto principal. – Gerald
@Gerald: Lo siento, debería aclarar, lo que quise decir es que, si quieres la versión no const que devuelve una referencia, entonces seguramente también querrás una versión de const. – ildjarn