Esto es algo que nunca conseguí con con-ref y realmente espero que alguien me lo explique.const-ref al enviar señales en Qt
Al llamar a una función dentro de otra función, entiendo que const-ref es la mejor manera al pasar objetos de pila que no planeo manipular. Por ejemplo:
void someInnerFunction(const QString& text) {
qDebug() << text;
}
void someFunction() {
QString test = "lala";
....
someInnerFunction(test);
}
Hasta ahora todo bien, supongo. Pero, ¿y las señales? ¿No hay ningún riesgo que conlleva pasar una referencia? Aunque es const
. Parece que he estado leyendo todos los documentos sobre const-ref, pero todavía encuentro un poco arriesgado ya que lo entiendo como "enviar una referencia a un objeto y mantenerlo const
". ¿Qué sucede si el objeto al que se refiere está fuera del alcance?
Por ejemplo:
void someFunction() {
connect(this, SIGNAL(someSignal(const QString&)), this, SLOT(someSlot(const QString&)));
QString test = "lala";
emit someSignal(test);
// doesnt test go out of scope here? and since im not using queued connection the QString object doesnt get copied.
}
void someSlot(const QString& test) {
qDebug() << test; // will this work?
}
Lo que realmente está pasando aquí? Frecuentemente uso const-ref en llamadas a funciones donde solo quiero acceder al objeto pero no cambiarlo. Pero, ¿y las señales? La mayoría de las señales parecen tener const-ref parm en el Qt doc, pero ¿cómo funciona?
* "Cuando se llama a una función dentro de otra función, entiendo que const-ref es la mejor manera al pasar objetos" * Eso es una respuesta muy única para un problema fundacional de C++, ¿quién te dijo eso? – HostileFork
quiero decir si no planea cambiarlos. Parece que qt usa ese enfoque en todas partes y sí, no lo hago en todas partes. pero ¿cuándo no sería bueno? y solo estoy hablando de stack-objects donde no quiero copiarlos a la función – chikuba
, básicamente pensé que la siguiente discusión interrelacionaba cuando un stackobject tenía que pasarse como un parm. http://stackoverflow.com/questions/270408/is-it-better-in-c-to-pass-by-value-or-pass-by-constant-reference pero mi pregunta era más qué hacer con las señales ya que algunas personas dicen que debe hacerse por const-ref para que no tengamos que copiar el objeto – chikuba