Это то, чего я никогда не понимал с const -ref, и я очень надеюсь, что кто-нибудь сможет объяснить это мне.
При вызове функции внутри другой функции я понимаю, что const -ref — лучший способ передачи объектов стека, с которыми я не планирую вмешиваться. Например:
void someInnerFunction(const QString& text) {
qDebug() << text;
}
void someFunction() {
QString test = "lala";
....
someInnerFunction(test);
}
Думаю, пока все хорошо. Но как насчет сигналов? Нет ли риска, связанного с передачей ссылки? Даже если это const
. Такое ощущение, что я прочитал всю документацию о const -ref, но я все еще нахожу это немного рискованным, поскольку я понимаю это как «отправить ссылку на объект и сохранить ее const
». Что, если объект, на который он ссылается, выходит за рамки?
Например:
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?
}
Что здесь происходит на самом деле? Я часто использую const -ref для вызовов функций, когда я просто хочу получить доступ к объекту, но не изменять его. Но как насчет сигналов? Похоже, что большинство сигналов имеют const -ref parm в документации Qt, но как это работает?