const -ref при отправке сигналов в Qt

Это то, чего я никогда не понимал с 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, но как это работает?

26
задан Null 28 July 2015 в 15:23
поделиться