これは私が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を頻繁に使用します。しかし、信号はどうですか?ほとんどの信号はQtドキュメントにconst-refparmがあるようですが、どのように機能しますか?