これはconst-refで決して得られないことです。誰かが私に説明できることを本当に願っています。Qtで信号を送信するときのconst-ref
別の関数の中で関数を呼び出すと、私が改ざんするつもりがないスタックオブジェクトを渡すときに、そのconst-refが最良の方法です。例:
void someInnerFunction(const QString& text) {
qDebug() << text;
}
void someFunction() {
QString test = "lala";
....
someInnerFunction(test);
}
これまでのところ、とても良いと思います。しかし、シグナルはどうですか?参照を渡すことに伴うリスクはありませんか?たとえそれがconst
であっても。私はconst-refに関するすべてのドキュメントを読んでいるように感じていますが、私は「オブジェクトへの参照を送信してそれを維持する」と理解しているため、少し危険です。それが参照しているオブジェクトが範囲外になるとどうなりますか?例えば
:
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のdocでconst-ref parmを持っているようですが、どのように機能しますか?
*「別の関数の内部関数を呼び出すときに、私はオブジェクトを渡すときのconst refは最良の方法であることを取得します。」*それはです基本的なC++の問題に対する答えはどれもきわめて大きかったのですが、それはあなたに言ったのですか? – HostileFork
あなたがそれらを変更する予定がないならば、私は意味します。ちょうどqtがどこでもどこでも使えるように思えますが、私はどこにでも行っていません。しかしそれがうまくいかないときは?私はそれらを関数にコピーしたくないスタックオブジェクトについて話しています – chikuba
基本的には、スタックオブジェクトをイン・パームとして渡さなければならないときに、以下の議論が交渉中であると考えました。 http://stackoverflow.com/questions/270408/is-it-better-in-c-to-pass-by-value-or-pass-by-constant-referenceしかし、私の質問はシグナルとは何か私たちはオブジェクトをコピーする必要がないようにconst-refで処理する必要があります。 – chikuba